Различие между>>> и>> операторы [дубликат]

5
задан NullUserException 14 February 2013 в 21:51
поделиться

3 ответа

Способ представления отрицательных чисел называется дополнением 2. Чтобы продемонстрировать, как это работает, возьмем в качестве примера -12. 12, в двоичном виде, равно 00001100 (предположим, что целые числа - это 8 бит, хотя в реальности они намного больше). Возьмем дополнение 2, просто инвертируя каждый бит, и получим 11110011. Затем просто добавьте 1, чтобы получить 11110100. Заметьте, что если вы повторите те же самые шаги, то получите обратно положительный результат 12.

The >>> сдвигается в нуль несмотря ни на что, поэтому 12 >>> 1 должно дать вам 00000110, то есть 6, а (-12) >>> 1 должно дать вам 01111010, то есть 122. Если вы действительно попробуете это в Java, вы получите гораздо большее число, так как Java-инты на самом деле намного больше 8 бит.

The >> сдвигается в бит, идентичный самому большому биту, так что положительные числа остаются положительными, а отрицательные - отрицательными. 12 >> 1 - это 00000110 (все еще 6) и (-12). >> 1 будет 11111010, что отрицательно 6.

8
ответ дан 13 December 2019 в 19:28
поделиться

Определение оператора >>> в спецификации языка Java:

Значение n>>s - это n правосдвинутых битовых позиций s с нулевым расширением. Если n положительное, то результат будет таким же, как и в n>>s; если n отрицательное, то результат равен результату выражения (n>>s)+(2<<~s), если тип левого операндов int, и результату выражения (n>>s)+(2L<<<~s), если тип левого операндов long.

2
ответ дан 13 December 2019 в 19:28
поделиться

Напротив, >>> заполняется нулями, а >> - единицами, если бит h.o. равен 1.

.
1
ответ дан 13 December 2019 в 19:28
поделиться
Другие вопросы по тегам:

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