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'或其附近。 –