反转每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位。

07-24 09:44
查看更多