2016-02-05 3 views
3

-2 's поразрядного дополнением является 100000 ... 01Почему -2 >>> 1 равен 2147483647 в Java

-2' s двоичного дополнением является +1000000 ... 10

-2 >>> 1 

Согласно >>> определения с левой стороны сдвиги в 0

должно быть примерно 01000......1, почему именно 0111111..11?

+0

'>>>' - это беззнаковый оператор сдвига вправо и не смотрит на бит знака, как '>>' делает .. [связанный вопрос] (http://stackoverflow.com/questions/16763917/what- is-the-the-the-the-the-unsigned-right-shift-operator-in-java) – txtechhelp

ответ

9

Для получения комплемента представления двоичного о 2 (т.е. -2 «s представление) вы начинаете с представлением 2, переворачивать все свои биты и добавить 1 к результату:

00000000000000000000000000000010 -- This is 2 
11111111111111111111111111111101 -- This the inverse of 2 
11111111111111111111111111111110 -- This is the inverse of 2, plus 1 

-2» ы двоичное представление - 11111111111111111111111111111110 (demo).

сдвигая его на правый один без знака-расширения производит

01111111111111111111111111111111 

который является именно результат, который вы получите.

+0

спасибо, я полностью пропустил инверсию -2. – javarookie

Смежные вопросы