题目

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

image.png

思路

思路一:转换成二进制字符串,然后反转字符串

  1. class Solution:
  2. def reverseBits(self, n: int) -> int:
  3. ans = bin(n)[2:][::-1]
  4. if len(ans) < 32:
  5. ans += '0' * (32 - len(ans))
  6. return int(ans, 2)

思路二:逐位操作

  • n&1 可以检索最右边的位是0还是1,也可以判断奇数还是偶数;
  • n = n >> 1 右移一位
  • n = n << 1 左移一位
    1. class Solution:
    2. def reverseBits(self, n: int) -> int:
    3. ans = 0
    4. power = 31
    5. while n != 0:
    6. ans += (n & 1) << power
    7. n = n >> 1
    8. power -= 1
    9. return ans

更多解法

https://leetcode-cn.com/problems/reverse-bits/solution/dian-dao-er-jin-zhi-wei-by-leetcode/