这一题涉及的操作符较多
| 操作符 | 含义说明 |
|---|---|
n & 1 | 取 n 的最低位(末尾一位),用于提取当前要反转的 bit |
sum << 1 | 左移一位:为当前位腾出空间(从右向左构建结果) |
n >>>= 1 | 无符号右移一位,并赋值回 n,去掉最低位,准备处理下一位 |
sum >>> 0 | 将最终结果转换为 32 位无符号整数,避免返回负数(JavaScript 中数字是浮点型) |
var reverseBits = function (n) {
let sum = 0;
for (let i = 0; i < 32; ++i) {
sum = (sum << 1) | (n & 1); // 左移并添加 n 的最低位
n >>>= 1; // 右移,准备处理下一位
}
return sum >>> 0; // 转为无符号 32 位整数
};
解题思路详解:
-
每次循环:
- 通过
n & 1提取最低位; - 将
sum左移一位,为该位腾出空间; - 使用
|把当前这一位合并到sum中;
- 通过
-
然后把
n无符号右移一位,处理下一位; -
总共执行 32 次(因为是 32 位整数);
-
最后用
sum >>> 0保证返回结果是无符号整数。