Рубрики
Без рубрики

Java>> и >>> операторы побитового сдвига

В этой статье объясняются различия между побитовыми операторами >> и >>>, включая дополнение двух, расширение знака, расширение нуля и смещение битов.

В программировании операторы побитового сдвига/|>> означают арифметический сдвиг вправо , >>> означает логический сдвиг вправо , различия:

  • >> , он сохраняет знак (положительные или отрицательные числа) после сдвига вправо на n бит, расширение знака.
  • >>> , он игнорирует знак после сдвига вправо на n бит, нулевое расширение.

Для работы с операторами побитового сдвига >> и >>> . Во-первых, нам нужно знать, как Java использует дополнение two для представления чисел со знаком (положительных и отрицательных).

1. Java и два дополняют друг друга.

Java использует дополнение двух для представления чисел со знаком (положительных и отрицательных чисел). В приведенном ниже примере мы покажем вам, как выразить положительные и отрицательные числа в дополнении к двум.

Примечание В дополнении к двум первый левый бит (самый значимый бит) представляет знак, 0 – положительное число, 1 – отрицательное число

1.1 Например, 2 и -2

Двоичный формат 2 равен 0000 0010

  0000 0010

Двоичный формат -2 (дополнение двух) равен 1111 1110

  0000 0010 (positive 2)
  1111 1101 (invert bits)
  1111 1110 (add 1)
  1111 1110 (-2 in binary)

1.2 Другой пример, 19 и -19

Двоичный формат 19 равен 0001 0011

  0001 0011

Двоичный формат -19 равен 1110 1101 .

  0001 0011 (positive 19)
  1110 1100 (invert bits)
  1110 1101 (add 1)
  1110 1101 (-19 in binary)

2. Арифметический сдвиг вправо >> или Расширение со знаком.

Арифметический сдвиг вправо >> или сдвиг вправо со знаком сохраняет знак (положительные или отрицательные числа) после сдвига битов. Этот оператор >> заполняет все оставшиеся пустые позиции исходным наиболее значимым битом (первым битом слева).

P.S Фото скопировано из Википедии.

2.1 Например, число 19 в 8 битах, и мы арифметически сдвигаем вправо на 2 бита 19>> 2 .

В приведенном выше примере последние 2 бита 11 смещены из 8 бит, но чем мы должны заполнить первые две пустые позиции слева?

Ответ зависит от исходного наиболее значимого бита (msb). В этом примере исходный msb равен 0, и мы заполняем ?? с 0.

2.2 Другой пример, число -19 в 8 битах, и мы арифметически сдвигаем вправо на 2 бита -19>> 2 .

В приведенном выше примере исходный msb равен 1, и мы заполняем ?? с 11 .

Опять же, в дополнении к двум первый бит слева (msb) представляет знак, 0 – положительное число, 1 – отрицательное число. Концепция копирования исходного наиболее значимого бита (msb) для заполнения пустого бита сохранит знак после сдвига бита – расширение со знаком .

Вопрос Вопрос: Подождите, каков ответ на -19>> 2 ? A: Ответ таков 1111 1011 или -5 .

Вот как дополнение двойки работает с отрицательным числом.

В дополнении к двум, первый бит слева, 1 означает отрицательный, а ответ -5.

3. Логический сдвиг вправо >>> или Нулевое расширение.

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

P.S Фото скопировано из Википедии.

3.1 Например, число 19 в 8 битах, и мы логически сдвигаем вправо на 2 бита 19 >>> 2 .

3.2 Для отрицательного числа -19 это то же самое. Независимо от того, какое условие, логический сдвиг вправо заполнит пустые позиции слева нулем, игнорируйте знак.

Вопрос В: Подождите, еще раз, каков ответ -19 >>> 2 ?

Для 8 бит. Ответ – 59.

В Java целое число, 32 бита, 4 байта. Ответ – 1073741819.

На Яве, -19 , преобразуйте его в двоичный код.

Какие-либо варианты использования этих побитовых операторов >>> или >>? Пожалуйста, прокомментируйте, спасибо.

Примечание Если вы обнаружили какие-либо ошибки или опечатки, особенно в двоичном формате, прокомментируйте и дайте мне знать 🙂

4. Java Печатает целое число в двоичном формате.

Это программа Java для использования Целое число.toBinaryString выведите Целое число в двоичном формате.

Вывод

|/Ссылки

Википедия – Арифметический сдвиг

|/загружено через JS автор комментарии

Оригинал: “https://mkyong.com/java/java-and-bitwise-shift-operator/”