2012-01-17 3 views
2

Запуск следующий код JavaScript показывает 63 в обоих случаях:чем разница между >> и >>> операторы в JavaScript

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

Что различия между >> и >>>? Их результаты кажутся равными.

+0

Почему вы ожидаете '8 >> 4' быть 2? – deceze

+0

мой плохой 8/16, так что это действительно 0, но как насчет разницы между >> и >>>? исправлено qeustion – 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 
Смежные вопросы