2017-09-10 34 views
-1

假設我有一些int x。我只想打印x的前5位。我怎樣才能做到這一點?我聽說,我可以這樣做如何在C中打印5位/ n位數字?

printf("%d", x & 0x05); 

打印x的前五位,但是這只是在我的函數輸出0。

+1

要得到最低五位,寫入'x&((1 << 5) - 1)'。對於五個最高位,還需要使用右移運算符('>>')。 – NPE

+1

0x05只是第一和第三位。低5是0x1f。 – Kevin

+4

掩碼「0x05」只會隔離「0」和「2」位。通過'4'隔離位'0'到'4'使用掩碼'0x1F' –

回答

0

如果您使用GCC,Visual Studio 2015(或更高版本)或Clang進行編譯,那麼您可以使用0b(二進制)前綴,以便您可以看到所需的位掩碼,而不是0x(十六進制)前綴,這是不太直觀的。

int x = 127; 
printf("%d\n", x & 0b11111000); // Prints 120 
printf("%d\n", x & 0b00011111); // Prints 31 

這些實施例將屏蔽掉3個至少顯著比特(1,2和4),或3最顯著位(64,32和16),僅留下其他5.

如果您正在編譯一個未在上面列出的編譯器,那麼您總是可以導入BOOST_BINARY宏。

如果你想查看實際位,那麼你可能想看到this question

+0

0b是最近支持的非標準擴展版本的gcc和clang,但通常不會被其他編譯器使用 –

+0

Huh。Touche @ChrisDodd。我一直認爲這是C標準的一部分,但你確實是正確的,我會更新以反映這一點。 – Addison