题目描述
原题链接:颠倒二进制位
颠倒给定的 32 位无符号整数的二进制位。
示例
输入: 00000010100101000001111010011100
输出: 00111001011110000010100101000000
解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,
因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。
解答
至于把输入转成二进制字符串再操作字符串翻转的方法就不提了。谈下题解区学到的用位运算去解答。
需要了解的前置知识:
- 与预算
&
1 & 1 // 1
1 & 0 // 0
0 & 1 // 0
0 & 0 // 0
- JavaScript 使用 32 位按位运算数
JavaScript 将数字存储为 64 位浮点数,但所有按位运算都以 32 位二进制数执行。
在执行位运算之前,JavaScript 将数字转换为 32 位有符号整数。
执行按位操作后,结果将转换回 64 位 JavaScript 数。
- 有符号右位移
>>
通过从左推入最左位的拷贝来向右位移,并使最右边的位脱落。
// -65536 的二进制表示为 1000 0000 0000 0001 0000 0000 0000 0000
;-65536 >> 2 // -16384
// -16384 的二进制表示为 1000 0000 0000 0000 0100 0000 0000 0000
思路:循环取最后一位拼接起来即可
var reverseBits = function (n) {
let result = 0
for (let i = 0; i < 32; i++) {
result = (result << 1) + (n & 1)
n = n >>> 1
}
return result >>> 0
}