- Библиотеки
- Операторы
- Sketch
- Управляющие операторы
- Синтаксис
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Указатели доступа
- Битовые операторы
- << (побитовый сдвиг влево)
- Составные операторы
- Данные
- Типы данных
- Преобразование типов данных
- Область видимости переменных и квалификаторы
- Утилиты
- Функции
- Цифровой ввод/вывод
- Аналоговый вход/выход
- Расширенный ввод/вывод
- Время
- Математические функции
- Тригонометрические функции
- Символы
- Случайные числа
- Биты и байты
- Внешние Прерывания
- Прерывания
- Функции передачи данных
- Функции
<< (побитовый сдвиг влево)
Описание
Оператор сдвига влево << вызывает сдвиг битов левого операнда влево на количество позиций, заданных правым операндом
Синтаксис
переменная << количество_бит;
параметры
переменная: допустимые типы данных: byte, int, long.
количество_бит - целое число <= 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), и посмотреть на мониторе его двоичное значение:
// Prints out Binary value (1 or 0) of byte
void printOut1(int c) {
for (int bits = 7; bits > -1; bits--) {
// Compare bits 7-0 in byte
if (c & (1 << bits)) {
Serial.print("1");
}
else {
Serial.print("0");
}
}
}