Проверьте, установлены или сброшены несколько битов - PullRequest
0 голосов
/ 24 января 2019

Я хочу проверить, установлены или очищены несколько битов в 32-битном регистре для манипулирования оборудованием. Я использую следующий подход, чтобы проверить, установлены ли требуемые биты (бит 8 и бит 1) uint32_t -варианта с именем statusRegister:

if ((statusRegister & 0x00000102) == 0x00000102) {}

И следующее, чтобы проверить, очищены ли нужные биты:

if ((statusRegister | ~0x00000102) == ~0x00000102) {}

Это правильно? Есть ли более лаконичный способ сделать это?

1 Ответ

0 голосов
/ 24 января 2019

Чтобы проверить, очищены ли несколько битов, вы обычно используете несколько более краткую идиому:

if ((statusRegister & 0x00000102) == 0) {}
// or
if (!(statusRegister & 0x00000102)) {}

Вы также можете проверить, установлены ли несколько битов с помощью:

if ((statusRegister | ~0x00000102) == ~0) {}
// or
if (!(~statusRegister & 0x00000102)) {}

Но версия в вашем вопросе встречается гораздо чаще.AND с битовой маской - это самая простая ментальная модель, которую проще понять вашим коллегам-программистам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...