
求职指导郭老师为您分享以下优质知识
二进制数反转的方法主要有以下三种,涵盖位操作、数学运算和循环处理三种思路:
一、位操作法(推荐)
通过逐位交换实现反转,适用于固定位数(如8位、32位)的二进制数。
步骤:
1. 定义结果变量 `res`(如32位无符号整数)。
2. 从最低位开始,依次将原二进制数的第 `i` 位放到 `res` 的第 `31-i` 位(位数从0开始)。
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;
}
};
```
二、数学运算法(基于十进制思路)
通过逐位提取并重新组合实现反转,适用于任意位数的二进制数。
步骤:
1. 初始化结果 `res` 为0。
2. 从最低位开始,依次将原二进制数的第 `i` 位乘以 `2^i` 并累加到 `res` 中。
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 * 2 + n % 2; // 提取最低位并累加
n /= 2; // 右移原数
}
return res;
}
};
```
三、循环处理法(逐位交换)
通过数组或循环交换二进制位实现反转,适用于动态位数的二进制数。
步骤:
1. 将原二进制数按位存入数组(如长度为 `n`)。
2. 交换数组首尾对应位,依次向中间靠拢,直到完成反转。
示例代码(C++):
```cpp
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
unsigned char arr;
for(int i = 0; i < 4; ++i) {
arr[i] = n & 1; // 提取最低位
n >
>
= 1; // 右移原数
}
for(int i = 0; i < 2; ++i) {
unsigned char temp = arr[i];
arr[i] = arr[3 - i];
arr[3 - i] = temp; // 交换首尾位
}
return (arr