bitWrite()
Записывает 0 или 1 в заданный бит числовой переменной — удобная альтернатива ручным битовым маскам с |= и &= ~.
Полная статья
Описание
bitWrite() позволяет изменить один конкретный бит числовой переменной, не затрагивая остальные. Функция работает с целочисленными типами — bool, int, long и другими вплоть до unsigned long (32 бита / 4 байта). Типы float и double не поддерживаются, поскольку их внутреннее представление с плавающей точкой не предполагает побитовой адресации.
Это удобный способ управлять флагами, регистрами или упакованными данными без ручного написания битовых масок и операций |= / &= ~.
Синтаксис
Чтобы записать значение b в бит на позиции n переменной x, используйте:
bitWrite(x, n, b)
Параметры
x— числовая переменная, бит которой нужно изменить. Передаётся по имени; функция изменяет её на месте.n— номер бита, считая с 0 для младшего (крайнего правого) бита. Бит 0 — это единицы, бит 7 — старший бит однобайтового числа.b— значение для записи:0сбрасывает бит,1устанавливает его.
Возвращает
Функция ничего не возвращает (void). Результат отражается непосредственно в переменной x.
Пример кода
Пример ниже демонстрирует работу bitWrite: значение переменной выводится в Serial Monitor до и после вызова bitWrite().
void setup() {
Serial.begin(9600);
while (!Serial) {} // ожидание подключения serial порта. Нужно только для нативного USB порта
byte x = 0b10000000; // префикс 0b указывает на двоичную константу
Serial.println(x, BIN); // 10000000
bitWrite(x, 0, 1); // записываем 1 в младший бит x
Serial.println(x, BIN); // 10000001
}
void loop() {}
Где применяется
- Управление несколькими флагами в одной переменной. Когда нужно хранить набор булевых состояний компактно — например, статусы восьми датчиков в одном
byte. - Формирование команд для периферии. Некоторые устройства принимают байты конфигурации, где каждый бит отвечает за отдельную настройку.
- Работа с протоколами без аппаратной поддержки. При программной реализации SPI или других побитовых протоколов удобно собирать байт бит за битом через
bitWrite(). - Отладка битовых масок. Можно последовательно устанавливать и сбрасывать биты, наблюдая результат в Serial Monitor, чтобы убедиться в правильности логики.
Практические замечания
- Нумерация битов начинается с нуля: бит 0 — младший, бит 7 — старший для
byte, бит 31 — старший дляunsigned long. Если указать номер бита, выходящий за разрядность переменной, поведение непредсказуемо. bitWrite()изменяет переменную напрямую — убедитесь, что она не объявлена какconst.- Для чтения отдельного бита используйте
bitRead(), для установки —bitSet(), для сброса —bitClear(). Эти функции образуют единый набор для побитовой работы. - Если нужно передать значение не
0или1, а произвольное ненулевое число в параметреb, функция всё равно запишет1: любое ненулевое значение интерпретируется как «бит установлен». - Типы
floatиdoubleне поддерживаются — компилятор может не выдать ошибку, но результат будет некорректным. ИспользуйтеbitWrite()только с целочисленными типами.