Возможный дубликат:
Когда стоит использовать битовые поля?
Недавно я искал побитовые операторы и наткнулся на концепцию битовое. Это кажется интересным и очень классным понятием, но когда и / или зачем человеку использовать это в своем коде?
Я знаю, что он довольно часто используется в программировании встроенных систем, но почему (кажется, я не могу найти ничего о том, почему он полезен)? Есть ли в этом какие-то преимущества? А где еще какие-то места полезны для битовых полей?
Некоторые виды использования, которые сразу приходят на ум:
В общем, используйте битовые поля, когда вам не важна скорость и вам не нужна структура памяти. Если вы заботитесь об этих вещах, то не используйте битовые поля.
Если у вас есть набор логических флагов, вы можете упаковать их, используя битовые поля (уменьшая размер, необходимый для хранения). Однако используйте только битовое поле для доступа к битовому полю.
Это проблема классического размера и скорости.
Дополнительным предостережением является то, что если у вас есть набор битовых полей, которые меньше собственного слова, то ваш компилятор, вероятно, попытается дополнить и выровнять структуру битового поля. Таким образом, вы должны в итоге #pragma упаковать структуру или использовать хотя бы собственное слово. Так что, если вы работаете на 32-битной машине и у вас есть 32 логических флага, которые используются только для внутреннего использования, тогда это будет хорошим использованием битовых полей.
Я использовал битовые поля как часть объединений, чтобы охватить регистр во встроенной системе, то есть управляющие регистры микроконтроллеров, кодеков. Они очень полезны для изображения физической компоновки регистров в виде программных конструкций, тем самым передавая удобочитаемость. Они обычно использовались для реализации драйверов устройств. Несколько лет назад 8-битные микросхемы с очень небольшим количеством флэш-памяти и оперативной памяти были обычным явлением, и поэтому битовые поля были распространены. В наши дни 32-битные микро с большим количеством оперативной памяти / флэш-памяти означают, что битовые поля не нужны.