今天刷leetcode上的题目revert bits的时候,用到了js里的位移操作,然后就出现了问题。题目里给出的数字是32位无符号整数,但是js里默认的整数是32位有符号整数,所以在执行
1 | var a = 1 << 31 |
时, a的值是-2147483648,而不是期望中的2147483648
如果要得到正确的值,就需要用到另一个位操作符:无符号右移运算符 >>>
它与普通的右移运算符的区别只是在右移补位时只补0,而普通的右移操作符对有符号整数进行操作,当符号位为1时补1,符号位为0时补0
当需要将一个有符号数转成无符号数时,使用 >>> 0即可,将一个无符号数转成有符号数,使用<< 0即可
1 | var a = 1 << 31; //a = -2147483648 |
知道了>>>操作符之后,这个leetcode问题就很好解决了,顺便把我的答案附上
1 | var reverseBits = function(n) { |
Ursprünglicher Link: http://yangguang1029.github.io/2016/08/15/javaScript中的无符号右移运算符/
Copyright-Erklärung: 转载请注明出处.