/** * @param {number} n - a positive integer * @return {number} - a positive integer */var reverseBits = function (n) { let result = 0; // 存储结果
// 32位二进制数,因此需要移动32次 // 每次将n的左后一位移动到result的第一位 for (let i = 0; i < 32; i++) { // 每次将结果左移一位,将当前数字填入空位 // 如果将移动放在if语句之后,会导致多移动一位 result <<= 1;
// 如果当前n的第一个位置为1,则需要将1填入result if (n & 1) { // 如果是1,才需要填入1 // 如果是0,无需填入,当前位置左移后自然是0 result += 1; }
// n向右移动一位,判断下一个位置 n >>= 1; }
// 11111111111111111111111111111101,这个Case反转后为负数,需要转换为正数 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Unsigned_right_shift return result >>> 0;};
评论