反转每4位中的每一位,例如:
0101 1011 1100 0110 becomes
1010 1101 0011 0110
另一个:
1010 1100 0101 1100 becomes
0101 0011 1010 0011
我想把所有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;
}
但如何解决上述问题呢?
最佳答案
你可以采用complete bit-reversal的算法,删除几个步骤,只剩下:(未测试)
x = ((x >> 1) & 0x55555555) | ((x & 0x55555555) << 1); // swap odd/even bits
x = ((x >> 2) & 0x33333333) | ((x & 0x33333333) << 2); // swap groups of 2
显然,这假设无符号整数是32位。