- Библиотеки
- Операторы
- Sketch
- Управляющие операторы
- Синтаксис
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Указатели доступа
- Битовые операторы
- >> (побитовый сдвиг вправо)
- Составные операторы
- Данные
- Типы данных
- Преобразование типов данных
- Область видимости переменных и квалификаторы
- Утилиты
- Функции
- Цифровой ввод/вывод
- Аналоговый вход/выход
- Расширенный ввод/вывод
- Время
- Математические функции
- Тригонометрические функции
- Символы
- Случайные числа
- Биты и байты
- Внешние Прерывания
- Прерывания
- Функции передачи данных
- Функции
>> (побитовый сдвиг вправо)
Описание
Оператор сдвига вправо >> заставляет биты левого операнда сдвигаться вправо на количество позиций, указанных правым операндом.
Синтаксис
переменная >> количество_бит;
Параметры
переменная: допустимые типы данных: byte, int, long.
количество_бит - целое число
Пример
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, результат у = 125.