Логический флаг
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
, Логический флаг бит истины или флаг истины в информатике — это логическое значение, представленное в виде одного или нескольких битов, которое кодирует переменную состояния с двумя возможными значениями.
Использование памяти
[ редактировать ]Один байт может содержать до 8 отдельных логических флагов путем сопоставления одного логического флага каждому биту, что делает этот метод очень экономичным и плотным хранением данных. Это известно как упакованное представление или побитовая упаковка, а противоположное кодирование, в котором используется только один логический флаг на каждый байт, известно как разреженное представление. Для памяти с побайтовой адресацией упакованное представление требует битовой маски и битового сдвига для доступа к отдельным флагам в каждом байте, что может потребовать дополнительных инструкций, тогда как разреженное представление не требует битовой маскировки. Упакованные представления чаще встречаются в регистрах оборудования и процессора в виде битовых полей. [1] тогда как разреженные представления чаще встречаются в программном обеспечении как переменные шириной в один или несколько байтов, хотя также могут поддерживаться упакованные представления. [2]
Эффективность
[ редактировать ]Большинство компьютерных языков поддерживают настройку и тестирование одного или нескольких битов в комбинации для использования в качестве индикаторов истинности, и обычно можно проверить до 256 различных комбинаций условий с помощью всего лишь одной инструкции для одного байта с использованием побитовых операций . Достижения в области проектирования процессоров и параллельных вычислений означают, что еще больше операций булевой алгебры над логическими флагами можно выполнить с помощью всего лишь одной инструкции с использованием технологии SIMD , часто реализуемой в языках программирования как встроенные функции компилятора . [3]
Использование
[ редактировать ]Иногда программы пишутся так, чтобы просто устанавливать флаги при обнаружении определенных условий, а не иметь несколько вложенных условных операторов (например, if
s), это может оказаться довольно сложным. Когда все условия проверены и все флаги установлены или выключены соответствующим образом, тестирование может начаться с различных комбинаций условий - со ссылкой на флаги, а не на сами переменные. Это может значительно упростить обработку и позволяет таблицы решений реализовать путем сопоставления их двоичных представлений в памяти.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Общие функции упаковки и распаковки битовых полей» . Документация ядра Linux . Проверено 10 апреля 2021 г.
- ^ "стд::вектор" . cppreference.com . 09.03.2021 . Проверено 10 апреля 2021 г.
- ^ «Руководство по внутренним компонентам Intel» . Зона разработчиков Intel . Проверено 10 апреля 2021 г.