Язык Си имеет доступ к отдельным битам, то есть можно делать битовые поля, где каждая переменная может занимать такое количество бит, сколько укажет пользователь.
Битовые поля используются, если необходимо сохранить булевую информацию. В одном байте можно хранить несколько переменных. Устройство передает информацию, кодируя биты в байты
Битовые поля должны быть организованы в виде структуры.
Для 32-битных сред - битовое поле от 1 до 32 бит
Для 64-битных сред - битовое поле от 1 до 64 бит
Битовое поле, на самом деле, - это просто особый тип структуры, определяющей, какую длину имеет каждый член. Стандартный вид объявления битовых полей следующий:
struct имя структуры {
тип имя1: длина;
тип имя2: длина;
...
тип имяN: длина;
}
Битовые поля должны объявляться как int, unsigned или signed. Битовые поля длиной 1 должны объявляться как unsigned, поскольку 1 бит не может иметь знака.
Размер структуры, содержащей битовые поля, всегда кратен 8. То есть, если одно поле содержит 5 бит, а второе 4, то второе поле начинается с восьмого бита и три бита остаются неиспользованными.
Неименованное поле может иметь нулевой размер. В этом случае следующее за ним поле смещается так, чтобы добрать до 8 бит.
Если же адрес поля уже кратен 8 битам, то нулевое поле не добавит сдвига.
Кроме того, если имеются обычные поля и битовые поля, то первое битовое поле будет сдвинуто так, чтобы добрать до 8 бит.
Запрещено:
- Брать адрес битового поля
- Обьявлять БП вне структуры
- Организовывать массивы из БП