简体   繁体   English

如何在C中交换成对的无符号整数位

[英]How to swap pairs of bits of unsigned int in C

This is the code I have so far?这是我到目前为止的代码? But its not working..但它不起作用..

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

bit_swap(0x1111111111111111) should return 0x2222222222222222 but is returning 0x0000000022222222 instead bit_swap(0x1111111111111111) 应该返回 0x2222222222222222 但返回 0x0000000022222222

value & 0xAAAAAAAA

That is equivalent to : value & 0x00000000AAAAAAAA这相当于: value & 0x00000000AAAAAAAA

And since we know that anything anded with 0 will give 0 hence the top 32 bits will always be 0. Change to:并且由于我们知道任何与 0 相加的东西都会给出 0,因此前 32 位将始终为 0。更改为:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM