在 C 中将 Unsigned Long 转换为二进制

Converting an Unsigned Long to Binary in C

我正在尝试将无符号长整型转换为 C 中的二进制。

char* long_to_binary(unsigned long k)

{
        static char c[65];
        c[0] = '[=10=]';

        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 但它甚至没有进入循环。

知道为什么会这样吗?

提前致谢!

您正在初始化 val 以设置所有位。因此,当您应用 & 时,除非 k 设置了所有位,否则比较结果将为假。

您只想在val中设置一位,并且您需要从最高位开始。所以像这样初始化它:

for (val = 1UL << (sizeof(unsigned long)*8-1); val > 0; val >>= 1) {

然后当你这样称呼它时:

printf("binary=%s\n",long_to_binary(0x12345678));

你明白了:

binary=0000000000000000000000000000000000010010001101000101011001111000