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

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

Синтаксис

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");
		}
	}
}