在C中将无符号长整数转换为二进制

时间:2016-02-25 21:48:46

标签: c binary long-integer

我试图在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,但它甚至没有进入循环。

为什么会发生这种情况?

提前致谢!

1 个答案:

答案 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