我试图在C中将无符号长整数转换为二进制。
char* long_to_binary(unsigned long k)
{
static char c[65];
c[0] = '\0';
unsigned long val;
for (val = ULONG_MAX; val > 0; val >>= 1)
{
strcat(c, ((k & val) == val) ? "1" : "0");
}
return c;
}
我在这里做错了什么?它打印出不正确的值。我尝试打印出val
,而不是打印base2值。因此它打印得像3 7 15 ....
我尝试将值初始化为ULONG_MAX + 1而不是ULONG_MAX,但它甚至没有进入循环。
为什么会发生这种情况?
提前致谢!
答案 0 :(得分:3)
您正在初始化val
以设置所有位。因此,当您应用&
时,除非k
设置了所有位,否则比较结果将为false。
您只想在val
中设置一位,并且您需要从最高位开始。所以初始化它是这样的:
for (val = 1UL << (sizeof(unsigned long)*8-1); val > 0; val >>= 1) {
然后当你这样称呼时:
printf("binary=%s\n",long_to_binary(0x12345678));
你明白了:
binary=0000000000000000000000000000000000010010001101000101011001111000