在以下两种情况下,运行以下JavaScript代码都会显示63
:
alert( 0xff >> 2 );
alert( 0xff >>> 2 );
>>
和>>>
之间有什么区别?他们的结果似乎是平等的。
答案 0 :(得分:8)
>>
是一个按位运算符,它将位移到右侧。右边的任何位都会丢失。
8 = 1000
^-->1
= 0000 = 0
>>>
与>>
类似,但它是无符号的,这意味着它的范围从0到2 32 -1而不是+/- 2 31 -1。
要查看我的第一个语句的结果,让我们使用按位运算符来设置数字:
1.234 >> 0 = 1 // Ok, fraction lost
1.234 >>>0 = 1 // Ok, fraction lost
-1.23 >> 0 = -1 // Ok, fraction lost
-1.23 >>>0 = 4294967295 // (negative numbers are not within the range)
Math.pow(2,31) >> 0 = -2147483648 // 2^31 is out of range
Math.pow(2,31) >>> 0 = 2147483648
因此,当超出范围的上边界时,计算将继续在其较低范围,反之亦然(例如<<
)。以下说明显示了从最低边界开始使用n = (n + 1) >> 0
和>>> 0
时发生的情况。
n
答案 1 :(得分:1)
答案 2 :(得分:1)