2012-01-17 8 views
2

で>>と>>>事業者間の違いは何ですが、両方のケースで63を示しています次のJavaScriptコードを実行するJavaScript

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

>>>>>との違いは何ですか?その結果は等しいと思われる。

+0

なぜあなたは '8期待>> 4' 2なるには? – deceze

+0

私の悪いのは8/16なので、それは本当に0ですが、>>と>>>の違いはどうですか?質問を修正しました – 0x90

+1

@ ZoZo123私はあなたの質問に言い換えたので、それはもっとポイントです。私はあなたがそれを気にしないことを願っています;) –

答えて

8

>>は、ビットを右にシフトするビット演算子です。右のビットはすべて失われます。

8 = 1000 
    ^-->1 
    = 0000 = 0 
>>

>>>と同様のことを行い、それは、それが0から2 の範囲であること-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