
彭老师为您分享以下优质知识
实现二进制反转可以通过多种方法完成,以下是几种常见的方法及其实现方式:
一、逐位翻转法(适用于任意位数)
通过循环逐位提取原数的最低位,并将其放到结果数的最高位。具体步骤如下:
1. 初始化结果变量为0。
2. 循环32次(针对32位整数),每次将原数右移1位,最低位通过`n % 2`提取,然后与结果变量左移1位后按位或运算。
3. 循环结束后结果即为反转后的二进制数。
C++实现示例:
```cpp
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t res = 0;
for (int i = 0; i < 32; ++i) {
res = (res >
= 1;
}
return res;
}
};
```
二、分治法(按位块交换)
将32位整数分成多个块(如每2位一组),逐组交换位置。例如:
原数:`01 0111 01011101`
交换后:`10 1100 01011101`
继续交换更高位块,最终得到完全反转的数。
C++实现示例:
```cpp
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
n = ((n >
>
16) & 0x0000FFFF) |
((n >
>
8) & 0x00FF00FF) |
((n >
>
4) & 0x0F0F0F0F) |
((n & 0x0000FFFF) >
8) & 0x00FF00FF) |
((n >
>
4) & 0x0F0F0F0F) |
((n & 0x00FF00FF) 4) & 0x0F0F0F0F) |
((n & 0x00F0F0F0) 1) | (n