190. 颠倒二进制位

颠倒给定的 32 位无符号整数的二进制位。

示例 1:

输入: 00000010100101000001111010011100

输出: 00111001011110000010100101000000

解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,
因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。

Solution:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t t = 0;
int i = 32;
while(i--){
t <<= 1;
//获得原数第一位的状态。
int a = n&1;
//将该状态赋给该数第一位。
t |= a;
//原数右移。
n >>= 1;
}
return t;
}
};

思路:

初始化一个全位置为0的数,将原数的最后一位赋给该数的最后一位,原数右移,该数左移,如此32次。