1
我想將無符號整數轉換爲48位二進制表示的數組,如果結果小於48位,則需要將其餘位清零。這裏的功能:將無符號整數轉換爲C中的48位二進制數
char *getBinary(unsigned int num)
{
char* bstring;
int i;
bstring = (char*) malloc(sizeof(char) * 49);
assert(bstring != NULL);
bstring[48] = '\0';
for(i = 0; i < 48; i++)
{
bstring[48 - 1 - i] = (num == ((1 << i) | num)) ? '1' : '0';
}
return bstring;
}
,並在主功能:
unsigned int nbr1=3213816984;
char * bi=getBinary(nbr1);
結果應該是:
000000000000000010111111100011101111010010011000
而是我的了:
111101001001100010111111100011101111010010011000
爲什麼我不能將超過32比特的比特清零TS?
由於'無符號整型num'是一個32位的量。在轉換之前,您必須將其轉換爲64位數量,例如'unsigned long long'。 –
@JonathanLeffler嗨,感謝您的回覆!我試圖使用無符號long long,但仍然得到相同的結果。 –
您必須將接口更改爲該函數,以便接受64位(或大於32位)值 - 在任何常規平臺上,您基本上永遠不會獲得超過32位的值。 '1 << i'中的'1'也是一個'int',因此也是32位。你可能需要在那裏使用'1ULL << i'。另外,'num ==((1ULL << i)| num)'可能沒有做你想做的。你可能需要'((1ULL << i)#)!!= 0'或其附近。 –