>> (Побитовый сдвиг вправо)

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

Синтаксис

variable >> number_of_bits;

Параметры

variable: Разрешенные типы данных: byte, int, long
number_of_bits: число <= 32. Разрешенные типы данных: int.

Пример кода

int a = 40; // в двоичной: 0000000000101000
int b = a >> 3; // в двоичной: 0000000000000101, или 5 в десятичной

Примечания и предупреждения

Когда вы сдвигаете x вправо на y бит (x >> y), а старший бит в x равен 1, поведение зависит от точного типа данных x. Если x имеет тип int, старший бит является знаковым битом, определяющим, является ли x отрицательным или нет, как мы обсуждали выше. В этом случае знаковый бит копируется в младшие биты:

int x = -16; // в двоичной: 1111111111110000
int y = 3;
int result = x >> y; // в двоичной: 1111111111111110

Такое поведение, называемое расширением знака, часто не соответствует желаемому. Вместо этого вы можете пожелать, чтобы нули были сдвинуты слева. Оказывается, что правильные правила сдвига отличаются для выражений типа unsigned int, поэтому вы можете использовать приведение типов для подавления копий, скопированных слева:

int x = -16; // в двоичной: 1111111111110000
int y = 3;
int result = (unsigned int)x >> y; // в двоичной: 0001111111111110

Если вы хотите избежать расширения знака, вы можете использовать оператор смещения вправо >> как способ деления на степени 2. Например:

int x = 1000;
int y = x >> 3; // Целочисленное деление 1000 на 8, в результате y = 125.