Reverse Bits

Reverse Bits

题目描述:

将一个无符号数的二进制进行逆序。

例子:

具体描述见LeetCode190

解题思路:

解题的思路类似于递归的想法。我们先将数左移位和右移位16位后进行或运算,这样就将左半侧和右半侧逆序完成;接下来在左右半侧中各自在不断的左移位和右移位进行位的逆序。

原始数据: 00 00 00 10 10 01 01 00 | 00 01 11 10 10 01 11 00

第一次操作:00 01 11 10 10 01 11 00 | 00 00 00 10 10 01 01 00

第二次操作:10 01 11 00 | 00 01 11 10 | 10 01 01 00 | 00 00 00 10

第三次操作: 11 00 10 01 11 10 00 01 01 00 10 01 00 10 00 00

第四次操作: 00 11 01 10 10 11 01 00 00 01 01 10 10 00 00 00

代码如下:

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
n = (n >> 16) | (n << 16);
n = ((n & 0xFF00FF00) >> 8) | ((n & 0x00FF00FF) << 8);
n = ((n & 0xF0F0F0F0) >> 4) | ((n & 0x0F0F0F0F) << 4);
n = ((n & 0xcccccccc) >> 2) | ((n & 0x33333333) << 2);
n = ((n & 0xaaaaaaaa) >> 1) | ((n & 0x55555555) << 1);
return n;
}
};