解题思路:
使用移位运算和与运算,将32位二进制数n中的每一位取出来,然后将取出的0或1相应地进行右移操作,最终加和得到结果。
下面的程序中,循环执行32次,每一次循环,得到n的第 i 位数,即 通过将 n 向右移 i 位,然后 与 1,得到tmp,再将tmp左移 31-i 位,加到res上,最终即可得到结果res。
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
int res = 0;
for(int i = 0; i < 32; i++){
int tmp = n >> i & 1;
res += tmp << (31 - i);
}
return res;
}
};