运行下面的JavaScript代码的区别>>显示了在这两种情况下63
:之间有什么和>>>运营商在JavaScript
alert(0xff >> 2);
alert(0xff >>> 2);
什么是>>
和>>>
之间的区别是什么?他们的结果似乎是平等的。
运行下面的JavaScript代码的区别>>显示了在这两种情况下63
:之间有什么和>>>运营商在JavaScript
alert(0xff >> 2);
alert(0xff >>> 2);
什么是>>
和>>>
之间的区别是什么?他们的结果似乎是平等的。
>>
是一个按位运算符,它将位移到右侧。右侧的任何位都丢失了。
8 = 1000
^-->1
= 0000 = 0
>>>
做类似事情>>
,但它是无符号的,这意味着它的范围从0到2 32 -1代替+/- 2 -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
为什么你会想到'8 >> 4'为2? – deceze 2012-01-17 09:29:24
我的不好是8/16,所以确实是0,但>>和>>>之间的区别是什么?修复了问题 – 0x90 2012-01-17 09:31:43
@ ZoZo123我已经改写了你的问题,以便它更贴近实际。我希望你不要介意;) – 2012-01-17 10:12:10