2012-01-17 53 views
2

运行下面的JavaScript代码的区别>>显示了在这两种情况下63之间有什么和>>>运营商在JavaScript

alert(0xff >> 2); 
    alert(0xff >>> 2); 

什么是>>>>>之间的区别是什么?他们的结果似乎是平等的。

+0

为什么你会想到'8 >> 4'为2? – deceze 2012-01-17 09:29:24

+0

我的不好是8/16,所以确实是0,但>>和>>>之间的区别是什么?修复了问题 – 0x90 2012-01-17 09:31:43

+1

@ ZoZo123我已经改写了你的问题,以便它更贴近实际。我希望你不要介意;) – 2012-01-17 10:12:10

回答

8

>>是一个按位运算符,它将位移到右侧。右侧的任何位都丢失了。

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