【leetcode】190. 颠倒二进制位

39 阅读1分钟

leetcode-190.png

这一题涉及的操作符较多

操作符含义说明
n & 1n 的最低位(末尾一位),用于提取当前要反转的 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 位整数
};

解题思路详解:

  1. 每次循环:

    • 通过 n & 1 提取最低位;
    • 将 sum 左移一位,为该位腾出空间;
    • 使用 | 把当前这一位合并到 sum 中;
  2. 然后把 n 无符号右移一位,处理下一位;

  3. 总共执行 32 次(因为是 32 位整数);

  4. 最后用 sum >>> 0 保证返回结果是无符号整数。