【问题标题】:How to swap pairs of bits of unsigned int in C如何在C中交换成对的无符号整数位
【发布时间】:2022-07-14 11:48:26
【问题描述】:

这是我到目前为止的代码?但它不起作用..

uint64_t bit_swap(uint64_t value) {
    return ((value & 0xAAAAAAAA) >> 1) |
            ((value & 0x55555555) << 1);   
}

bit_swap(0x1111111111111111) 应该返回 0x2222222222222222 但返回 0x0000000022222222

  • 代码到底应该做什么? “交换位”几乎不是很精确。
  • 它应该返回具有交换位对的值。抱歉现在将编辑问题
  • 您能否举一些输入、预期结果和实际结果的例子?
  • bit_swap(0x1111111111111111) 应该返回 0x2222222222222222 但返回 0x0000000022222222,
  • 如果您这样做&amp; 0xAAAAAAAA,很明显前 32 位将始终为 0,因为它们始终与 0 进行与运算。尝试使用 &amp; 0xAAAAAAAAAAAAAAAA

标签: c binary bit-manipulation bitwise-operators


【解决方案1】:
value & 0xAAAAAAAA

这相当于:value &amp; 0x00000000AAAAAAAA

由于我们知道任何与 0 相加的东西都会给出 0,因此前 32 位将始终为 0。更改为:

return ((value & 0xAAAAAAAAAAAAAAAA) >> 1) |
        ((value & 0x5555555555555555) << 1);  

【讨论】:

    猜你喜欢
    • 2016-01-05
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2020-01-20
    • 2015-12-29
    • 2023-04-03
    相关资源
    最近更新 更多