[英]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.