我想創建一個函數來打印二進制使用按位和位移的數字,但我無法正確打印它。以下是我的代碼。使用按位和位移轉換爲二進制
void PrintInBinary(unsigned int decNum)
{
int i = 0;
unsigned int highestOne = 1 << (sizeof(unsigned int)*8 - 1);
for(i = 0; i < sizeof(int)*8; i++) {
printf("%u", decNum & (highestOne >> i));
}
printf("\n");
}
int main()
{
unsigned int a = 128;
PrintInBinary(a);
system("PAUSE");
return 0;
}
以下是輸出:
0000000000000000000000001280000000
基本上,其打印2 ^比特,而不是僅僅一個1在每個比特位置(例如,如果我想轉換7爲二進制它會是0000000 ... 00421而不是0000000 ... 00111)。這可能是我錯過的小事,但任何幫助傢伙?在過去的20分鐘裏,我一直在這個問題上找不到如此簡單的東西。
順便說一句,而不是'的sizeof(int)的* 8',您可能需要使用'的sizeof (int)* CHAR_BIT'。 – 2012-04-25 18:51:56
使用像8這樣的神奇數字並不好。 – 2012-04-25 18:55:40