C 反转无符号整数中的位

标签 c binary int bit-manipulation unsigned

我正在使用按位运算符将无符号整数转换为二进制,目前执行整数 & 1 来检查位是 1 还是 0 并输出,然后右移 1 以除以 2。但是这些位在错误的顺序(反向),所以我想在开始之前反转整数中的位顺序。

有没有简单的方法可以做到这一点?

例子: 所以如果我得到 unsigned int 10 = 1010

while (x not eq 0) 
  if (x & 1)
    output a '1'
  else 
    output a '0'
  right shift x by 1

这会返回 0101,这是不正确的...所以我本来想在运行循环之前颠倒位的顺序,但我不确定该怎么做?

最佳答案

颠倒一个单词中的位是很烦人的,只是以相反的顺序输出它们更容易。例如,

void write_u32(uint32_t x)
{
    int i;
    for (i = 0; i < 32; ++i)
        putchar((x & ((uint32_t) 1 << (31 - i)) ? '1' : '0');
}

这是反转位顺序的典型解决方案:

uint32_t reverse(uint32_t x)
{
    x = ((x >> 1) & 0x55555555u) | ((x & 0x55555555u) << 1);
    x = ((x >> 2) & 0x33333333u) | ((x & 0x33333333u) << 2);
    x = ((x >> 4) & 0x0f0f0f0fu) | ((x & 0x0f0f0f0fu) << 4);
    x = ((x >> 8) & 0x00ff00ffu) | ((x & 0x00ff00ffu) << 8);
    x = ((x >> 16) & 0xffffu) | ((x & 0xffffu) << 16);
    return x;
}

关于C 反转无符号整数中的位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9144800/

相关文章:

python - 将二进制数据保存到 MySQLdb - Python

c - 十进制素数转二进制

Scala:如何强制将整数包装为对象?

java - C++ 中的 int 指针数组可以作为 Java 中的 Integer 引用的 ArrayList 完成吗?

c# - 我可以使用 Xcode 编写 Excel 插件吗?

c - 需要帮助在 Linux 中使用 C 语言应用定时器

c - C 中的段错误(核心转储)

python - 在python中将html页面转换为二进制格式

c - openCL Kernel计算Pi不是正确的值

java - 最少硬币使用算法 Java