颠倒给定的 32 位无符号整数的二进制位:用 C++实现
时间: 2024-02-06 10:10:31 浏览: 71
可以通过移位和按位运算符来实现颠倒给定的32位无符号整数的二进制位。具体实现如下:
```c++
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t res = 0;
int power = 31; // 32位整数,最高位为2^31
while (n != 0) {
res += (n & 1) << power; // 通过按位与运算获取最低位,然后左移power位
n = n >> 1; // 右移一位
power--; // power减一
}
return res;
}
};
```
上述代码中,变量 `res` 表示颠倒后的结果,变量 `power` 表示当前位需要左移的位数。在循环中,首先通过按位与运算 `n & 1` 获取最低位,然后将其左移 `power` 位,得到当前位的值,累加到结果中。接着将给定的整数右移一位,继续处理下一位,同时将 `power` 减一,以便下一次左移时向左移动更少的位数,直到所有位都处理完毕。最后返回结果即可。
阅读全文