题目链接:LeetCode 190. 颠倒二进制位

一、题解

题目意思:

将一个32位无符号整数进行反转!

思路:

  1. 可以从后往前取出该无符号整数的每一位即n >> 1 & 1
  2. 然后将结果左移空出最后一位再加上上一步的结果即可,(res << 1) + (n >> i & 1)

注意:

  • 加法优先级高于位运算
  • 移位运算高于与或非

时间复杂度O(1)

空间复杂度O(1)

二、AC代码

参考代码:

1
2
3
4
5
6
7
8
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t res = 0;
for(int i = 0; i < 32; i ++) res = (res << 1) + (n >> i & 1);
return res;
}
};