<< (сдвиг битов влево)
Описание
Оператор сдвига влево << сдвигает биты левого операнда влево на количество позиций, заданное правым операндом.
Синтаксис
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");
}
}
}