'use strict' /** * @param {number} n - a positive integer * @return {number} - a positive integer */ var reverseBitsOld = function (n) { let res = 0 let last for (let i = 0; i < 32; i++) { last = n & 1 n >>= 1 res <<= 1 res += last } return res >>> 0 } // [note] in js, signed -> unsigned: n >>> 0 var reverseBits = function (n) { for (let i = 0, j = 31; i <= j; i++, j--) { let bit = (1 << i & n) >>> i ^ (1 << j & n) >>> j n ^= bit << j n ^= bit << i } return n >>> 0 } function __main__() { /*eslint no-console: ["error", { allow: ["log"] }] */ console.log(reverseBits(4294967295)) console.log(reverseBits(43261596)) console.log(reverseBits(1)) console.log(reverseBitsOld(4294967295)) console.log(reverseBitsOld(43261596)) console.log(reverseBitsOld(1)) } __main__()