Java>> по сравнению с>>> Оператор? [дубликат]

Вы можете вызвать еще один Bash с другим bash_profile. Также вы можете создать специальный bash_profile для использования в среде multi-bashprofile.

Помните, что вы можете использовать функции внутри bashprofile, и эти функции будут доступны во всем мире. например, «функция user {export USER_NAME $ 1}» может устанавливать переменную во время выполнения, например: user olegchir & amp; & amp; env | грег олегчир

17
задан Nate 26 June 2009 в 21:28
поделиться

9 ответов

Целые числа со знаком используют старшие биты для обозначения знака.

Таким образом, >> сохраняет знак, а >>> - нет » т. Вот почему >> называется арифметическим сдвигом, а >>> - логическим сдвигом.

Таким образом , вы можете сделать (предполагая 32-битные целые числа) следующее:

  • -10 >> 1 дает -5 ( 0xFFFFFFF6 >> 1 дает 0xFFFFFFFB - обратите внимание, что старший бит остается то же самое.)
  • -10 >>> 1 дает 2147483643 ( 0xFFFFFFF6 >>> 1 дает 0x7FFFFFFB - обратите внимание, что все биты были сдвинуты, поэтому старший бит теперь равен нулю. Число больше не является отрицательным согласно арифметике с дополнением до двух.)

Для положительных целых чисел, >> и >>> действуют одинаково, поскольку старший бит уже равен нулю.

Это также объясняет, почему нет необходимости в операторе <<< . Поскольку знак будет удален при сдвиге битов влево, он не будет отображаться ни на какую разумную арифметическую операцию.

24
ответ дан 30 November 2019 в 10:14
поделиться

Из Примечания к Java: Побитовые операторы :

n >> p (сдвиг вправо) Сдвигает биты на n правых p позиций. Если n является числом со знаком дополнения до 2, знаковый бит сдвигается в старшие позиции.

Пример: 5 >> 2 = 1

n >>> p (сдвиг вправо) Сдвигает биты на n правых p позиций. Нули сдвигаются в старшие позиции.

Пример: -4 >>> 28 = 15

9
ответ дан 30 November 2019 в 10:14
поделиться

Арифметический сдвиг >> - это деление на два для целых чисел со знаком, а логический сдвиг >>> - это деление на два для беззнаковых чисел (если вы интерпретируете битовый шаблон в подписанном Java int как беззнаковое целое).

1
ответ дан 30 November 2019 в 10:14
поделиться

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

Это из ] JLS §15.19 Операторы сдвига :

Операторы сдвига включают левый сдвиг << , сдвиг вправо со знаком >> и сдвиг вправо без знака >>> ; они синтаксически левоассоциативны (группируются слева направо). Левый операнд оператора сдвига - это значение, которое нужно сдвинуть; правый операнд определяет расстояние сдвига.

...

Значение n >> s равно n сдвинутым вправо s позициям битов с расширением знака. Результирующее значение равно ⌊ n / 2 s ⌋. Для неотрицательных значений n это эквивалентно усечению целочисленного деления, вычисляемому оператором целочисленного деления / , на два в степени s .

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

5
ответ дан 30 November 2019 в 10:14
поделиться

some info

the >> operator preserves the leftmost bits. The leftmost bits are filled with the previous content. This is to do with sign extension. In this case there is a 1 at the left and it is preserved. If you do not want to keep the 1 to the left, use the >>> operator which shifts 0's into the leftmost bits

0
ответ дан 30 November 2019 в 10:14
поделиться

Это связано с математикой значений со знаком. >>> сводит нули к битам высокого порядка, >> сохраняет знаковый бит и втягивает его.

0
ответ дан 30 November 2019 в 10:14
поделиться

Знак >> - это арифметический сдвиг, который сохраняет знаковый бит в любых «свободных» битах. Другой - логический сдвиг, который заполняет пустые места нулями.

2
ответ дан 30 November 2019 в 10:14
поделиться

Для положительных чисел нет разницы. Отрицательные числа (дополнение до двух) будут заполнены нулями для >>> и единицами для >>.

1010 0110 >>> 2 = 0010 1001

1010 0110 >> 2 = 1110 1001

5
ответ дан 30 November 2019 в 10:14
поделиться
Другие вопросы по тегам:

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