<< (сдвиг битов влево)

Описание

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

Синтаксис

variable << number_of_bits;

Параметры

  • variable – допустимые типы данных: byte, int, long.

  • number_of_bits – число, которое <= 32. Допустимые типы данных: int.

Пример кода

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

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

Когда вы сдвигаете значение x на y бит (x << y), крайние левые y бит в x теряются – буквально сдвигаются в небытие:

int x = 5;  // двоичное: 0000000000000101
int y = 14;
int result = x << y;  // двоичное: 0100000000000000 - первая 1 в 101 была отброшена

Если вы уверены, что ни одна из единиц в значении не сдвигается за пределы разрядности, простой способ представить оператор сдвига влево – он умножает левый операнд на 2, возведённое в степень правого операнда. Например, для генерации степеней 2 можно использовать следующие выражения:

Операция

Результат

1 << 0

1

1 << 1

2

1 << 2

4

1 << 3

8

1 << 8

256

1 << 9

512

1 << 10

1024

Следующий пример можно использовать для вывода значения полученного байта в монитор последовательного порта, используя оператор сдвига влево для перемещения по байту от младшего бита (LSB) к старшему (MSB) и вывода его двоичного значения:

// Выводит двоичное значение (1 или 0) байта
void printOut1(int c) {
  for (int bits = 7; bits > -1; bits--) {
    // Сравнение битов 7-0 в байте
    if (c & (1 << bits)) {
      Serial.print("1");
    }
    else {
      Serial.print("0");
    }
  }
}

Смотрите также