Главная chevron_right Функции chevron_right Биты и байты chevron_right bit()

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) — это покажет двоичное представление маски и поможет убедиться, что нужный бит действительно установлен.

Полезные материалы