bit()
Возвращает число, в котором установлен ровно один бит на позиции n — удобная битовая маска для работы с регистрами и флагами.
Полная статья
Описание
bit() возвращает число, в котором ровно один бит установлен в 1, а все остальные равны 0. Результат — это так называемая битовая маска для конкретной позиции. Такие маски используют в побитовых операциях: чтобы установить бит в регистре, сбросить его или проверить, установлен ли он.
Например, bit(3) даёт число 8 (в двоичном виде 00001000). Это ровно восьмое значение степени двойки — то есть bit(n) эквивалентно (1 << n).
Синтаксис
Используйте следующую функцию, чтобы получить маску для бита с номером n:
bit(n)
Параметры
Функция принимает один параметр:
n: номер (позиция) бита, начиная с нуля. n должен быть в диапазоне от 0 до 31 — это соответствует 32-битному беззнаковому целому. Позиция 0 — это самый младший (правый) бит.
Возвращает
Функция возвращает целочисленное значение, в котором только бит с номером n установлен в 1, а все остальные биты равны 0.
Пример кода
Изменить данный байт x, превратив его 6-й бит в 1:
uint8_t x = 0b00000000; // исходный байт
void setup() {
Serial.begin(9600);
int index = 6; // индекс изменяемого бита
x |= bit(index-1);
Serial.print("The resulting byte is: ");
Serial.println(x, BIN);
}
void loop() {
}
Примечание
Вот что bit() делает внутри:
#define bit(n) (1 << (n))
Где применяется
- Работа с регистрами микроконтроллера — установка или сброс отдельных битов в регистрах управления периферией (
DDRB,PORTBи т. п.). - Побитовые флаги — когда в одном байте хранится несколько независимых булевых состояний,
bit()помогает обращаться к каждому флагу по номеру. - Проверка состояния бита — в сочетании с оператором
&удобно проверять, установлен ли конкретный бит:if (value & bit(3)) { ... }. - Сброс бита — вместе с оператором
~и&=позволяет очистить нужный бит:value &= ~bit(3).
Практические замечания
- Параметр
nотсчитывается от нуля:bit(0)=1,bit(1)=2,bit(7)=128. - Допустимый диапазон
n— от0до31. Значения за пределами этого диапазона дадут непредсказуемый результат. bit(n)— это просто удобная запись для(1 << n). Обе формы работают одинаково, выбор — дело стиля.- Если вы работаете с 8-битными регистрами или байтами, имеет смысл использовать значения
nот0до7— это гарантирует, что результат поместится вuint8_t. - Для отладки можно вывести результат через
Serial.println(bit(n), BIN)— это покажет двоичное представление маски и поможет убедиться, что нужный бит действительно установлен.