假設我有一些int x。我只想打印x的前5位。我怎樣才能做到這一點?我聽說,我可以這樣做如何在C中打印5位/ n位數字?
printf("%d", x & 0x05);
打印x的前五位,但是這只是在我的函數輸出0。
假設我有一些int x。我只想打印x的前5位。我怎樣才能做到這一點?我聽說,我可以這樣做如何在C中打印5位/ n位數字?
printf("%d", x & 0x05);
打印x的前五位,但是這只是在我的函數輸出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。
0b是最近支持的非標準擴展版本的gcc和clang,但通常不會被其他編譯器使用 –
Huh。Touche @ChrisDodd。我一直認爲這是C標準的一部分,但你確實是正確的,我會更新以反映這一點。 – Addison
要得到最低五位,寫入'x&((1 << 5) - 1)'。對於五個最高位,還需要使用右移運算符('>>')。 – NPE
0x05只是第一和第三位。低5是0x1f。 – Kevin
掩碼「0x05」只會隔離「0」和「2」位。通過'4'隔離位'0'到'4'使用掩碼'0x1F' –