Double Greater Than Sign (>>) в Java?

Что означает знак >> в Java? Я никогда раньше не видел его раньше, но наткнулся на него сегодня. Я попытался найти его в Google, но не нашел ничего полезного.

+36
источник поделиться
7 ответов

Это оператор сдвига бит. Документация

Записанный оператор сдвига влево "< сдвигает бит влево и подписанный оператор правой смены" → "сдвигает бит вправо. битовая диаграмма задается левым операнд и количество позиций для перемещения по правому операнду. Оператор сдвига без знака" → > "сдвигает ноль в самый левый положение, в то время как крайнее левое положение после" → " зависит от расширения знака.

+36
источник

Оператор >> - оператор побитового сдвига вправо.

Простой пример:

int i = 4;
System.out.println(i >> 1); // prints 2 - since shift right is equal to divide by 2
System.out.println(i << 1); // prints 8 - since shift left is equal to multiply by 2

Отрицательные числа ведут себя одинаково:

int i = -4;
System.out.println(i >> 1); // prints -2
System.out.println(i << 1); // prints -8

Вообще говоря, i << k эквивалентно i*(2^k), а i >> k эквивалентно i/(2^k).

Во всех случаях (как и любой другой арифметический оператор) вы всегда должны быть уверены, что не переполняете свой тип данных.

+69
источник

Он сдвигает бит...

Вот информация о java-операторы

Например

101  = 5
Shifting out the right "1"
10 = 2
Shifting the other way...
1010 = 10
+15
источник

Правый сдвиг:

Оператор правого сдвига, → , сдвигает все биты в значении справа определенное число раз. Его общая форма: значение → num Здесь num указывает количество позиций для смещения значения по значению вправо. То есть, → перемещает все биты в указанном значении вправо, число бит позиций, указанное номером. Следующий фрагмент кода сдвигает значение 32 вправо на две позиции, в результате чего устанавливается значение 8:

int a = 32;
a = a >> 2; // a now contains 8

Когда значение имеет биты, которые "сдвинуты", эти биты теряются. Например, следующий фрагмент кода сдвигает значение 35 в правые две позиции, что приводит к потере двух младших бит, в результате чего снова устанавливается значение 8.

int a = 35;
a = a >> 2; // a still contains 8

Глядя на ту же операцию в двоичном режиме, более ясно, как это происходит:

00100011 35 >> 2
00001000 8

Каждый раз, когда вы смещаете значение вправо, оно делит это значение на два - и отбрасывает любой остаток. Вы можете воспользоваться этим для высокопроизводительного целочисленного деления на 2. Конечно, вы должны быть уверены, что не сдвигаете ни одного бита с правого конца. Когда вы смещаетесь вправо, верхние (левые) биты, выставленные правой сменой, заполняются предыдущим содержимым верхнего бита. Это называется расширением знака и служит для сохранения знака отрицательных чисел, когда вы смещаете их вправо. Например, –8 >> 1 - –4, который в двоичном выражении равен

11111000 –8 >>1
11111100 –4

Интересно отметить, что если вы сдвигаете -1 вправо, результат всегда остается равным -1, так как расширение знака продолжает вносить больше бит в старшие разряды. Иногда нежелательно значить-расширять значения, когда вы смещаете их вправо. Например, следующая программа преобразует значение байта в шестнадцатеричное представление строки. Обратите внимание, что сдвинутое значение маскируется с помощью ANDing с помощью 0x0f, чтобы отбросить любые биты расширенного знака, чтобы значение могло использоваться как индекс в массиве шестнадцатеричных символов.

// Masking sign extension.
class HexByte {
  static public void main(String args[]) {
    char hex[] = {
      '0', '1', '2', '3', '4', '5', '6', '7',
      '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
    };
  byte b = (byte) 0xf1;
 System.out.println("b = 0x" + hex[(b >> 4) & 0x0f] + hex[b & 0x0f]);
}
}

Вот результат этого:

b = 0xf1
+6
источник

Это правильный сдвиг бит.

+3
источник

Я считаю, что это оператор смещения бит. Как и в ходах, все 1s и 0s занимают одно положение справа. (Я думаю, вы можете себе представить, что < < делает...:))

+1
источник

Как отмечали другие, это правильный бит-сдвиг. Вы увидите это на многих языках так называемого "C-стиля".

Для получения подробной информации о смещении бит, предоставленной вашими коллегами из StackOverflow, просмотрите вопрос, который я отправил много веков назад, что помогло мне, наконец, получить его: Абсолютное руководство для начинающих по бит- Перемена. (Люди, которые размещали там, были достаточно любезны, чтобы углубляться в эту тему, и я надеюсь, что это тоже поможет.)

+1
источник

Посмотрите другие вопросы по метке или Задайте вопрос