Поразрядные операторы сдвига. Подписанный и неподписанный

Я занимаюсь для экзамена SCJP с помощью примечаний давки из Интернета.

Согласно моим примечаниям >> оператор, как предполагается, является подписанным сдвигом вправо, при этом знаковый бит вводится слева. В то время как левый оператор смещения << как предполагается, сохраняет знаковый бит.

Играя вокруг однако, я могу сместить знак с << оператор (f.e. Integer.MAX_VALUE << 1 оценивает к -2, в то время как я так и не смог сместить знак с >> оператор.

Я должен неправильно понимать что-то здесь, но что?

18
задан ROMANIA_engineer 17 May 2015 в 22:53
поделиться

1 ответ

">>" подписано, потому что оно сохраняет знак. В качестве заполнителя используется самая левая цифра в двоичном представлении числа. Например:

    | this value is used as a filler 
    11011011 
 >> 11101101  

    01010010
 >> 00101001 

«>>>» - беззнаковая версия этого оператора. В качестве заполнителя всегда используется ноль:

    11011011 
>>> 01101101  

    01010010
>>> 00101001

В двоичном представлении самая левая цифра определяет знак числа. Итак, если это «1», то у нас отрицательное значение, а если «0» - то наше число положительное. Поэтому использование самой левой цифры в качестве заполнителя позволяет сохранить знак постоянно.

45
ответ дан 30 November 2019 в 06:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: