Я знаю, что можно использовать битовые маски для выделения определенных битов в структуре данных, но зачем тогда беспокоиться о битовых полях?
Один использует битовые поля либо для сопоставления структуры данных, размеры полей которой составляютне все соответствуют встроенным типам вашей реализации C, таким как заголовок TCP, или просто для уменьшения размера структуры данных.
Вы действительно можете упаковать и распаковать данные вручную, используя маски и смещения, но битовые поляпредоставить более удобный синтаксис для этого.Помимо простого скрытия смещения и маскирования, доступ к битовым полям прозрачно обрабатывает проблемы расширения знака и специальные характеристики _Bool
, где это уместно.
Компромисс - это потеря контроля над деталями.Если вы упаковываете и распаковываете вручную, тогда вы можете быть полностью уверены в управлении и расположении, с большой мобильностью.Если вы используете битовые поля, с другой стороны, и , вы заботитесь о деталях их расположения, тогда вам нужно полагаться на детали реализации или расширения, чтобы гарантировать, что у вас есть требуемый макет,если это вообще возможно из вашей реализации.