运行以下 JavaScript 代码会在两种情况下显示 63
:
alert( 0xff >> 2 );
alert( 0xff >>> 2 );
>>>
和 >>>
有什么区别?他们的结果似乎是一样的。
最佳答案
>>
是按位运算符,它将位向右移动。右边的任何位都将丢失。
8 = 1000
^-->1
= 0000 = 0
>>>
做与 >>
类似的事情, 但它是无符号的,这意味着它的范围是从 0 到 232-1 而不是 +/- 231-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
从最低边界开始。
// Signed Unsigned
>> >>>
-2147483647 0
-2147483646 1
... ...
2147483646 4294967294
2147483647 4294967295
-2147483647 0
-2147483646 1
关于javascript - JavaScript 中 >> 和 >>> 运算符有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8892206/