在 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
我正在尝试将无符号长整型转换为 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