/**
* @param {number} n - a positive integer
* @return {number} - a positive integer
*/
var reverseBits = function(n) {
var result = 0;
for (var i = 0; i < 32; i++) {
result |= (n >> i & 0x1) << (31 - i);
// 取得n特定位的值,设置到result特定位中
}
return result >>> 0;
};
这道题虽然是简单题,但是却涉及到了JS中,有符号数和无符号数的问题:在 JavaScript 中,所有整数字变量默认都是有符号整数。
例如,在C语言中:
unsigned int a = 3774191835u;
unsigned int b = a >> 2;
/* b == 943547958 */
但是,在JS中:
var a = 3774191835;
var b = a >> 2;
/* b == -130193866 */
可见,输出结果完全不同,因此,这道题我们就需要将JS中的有符号数转化为无符号数:
var signed,unsigned;
var signed = -1;
unsigned = signed >>> 0;// 有符号变无符号
alert(unsigned);
signed = unsigned << 0;// 无符号变有符号
alert(signed)