use*_*025 1 c bit-manipulation
反转每4位中的每个位,例如:
0101 1011 1100 0110 becomes
1010 1101 0011 0110
Run Code Online (Sandbox Code Playgroud)
另一个:
1010 1100 0101 1100 becomes
0101 0011 1010 0011
Run Code Online (Sandbox Code Playgroud)
我可以考虑将所有32位反转如下:
unsigned int reverseBits(unsigned int num)
{
unsigned int count = sizeof(num) * 8 - 1;
unsigned int reverse_num = num;
num >>= 1;
while(num)
{
reverse_num <<= 1;
reverse_num |= num & 1;
num >>= 1;
count--;
}
reverse_num <<= count;
return reverse_num;
}
Run Code Online (Sandbox Code Playgroud)
但是如何解决上述问题呢?
您可以采用算法进行完全位反转,并删除几个步骤,只需:(未测试)
x = ((x >> 1) & 0x55555555) | ((x & 0x55555555) << 1); // swap odd/even bits
x = ((x >> 2) & 0x33333333) | ((x & 0x33333333) << 2); // swap groups of 2
Run Code Online (Sandbox Code Playgroud)
显然,假设无符号整数是32位.