我希望检查是否为了操作硬件而设置或清除了32位寄存器中的多个位。我采用以下方法来检查是否设置了uint32_t
变量statusRegister
的所需位(位8和位1):
if ((statusRegister & 0x00000102) == 0x00000102) {}
然后检查以下内容是否清除了所需位:
if ((statusRegister | ~0x00000102) == ~0x00000102) {}
这是正确的吗?有更简洁的方法吗?
答案 0 :(得分:3)
要检查是否清除了多个位,通常会使用以下更简洁的习惯用法:
if ((statusRegister & 0x00000102) == 0) {}
// or
if (!(statusRegister & 0x00000102)) {}
您还可以使用以下方法检查是否设置了多个位:
if ((statusRegister | ~0x00000102) == ~0) {}
// or
if (!(~statusRegister & 0x00000102)) {}
但是问题中的版本更为常见。用位掩码进行“与”运算是最简单的思维模型,对您的程序员来说也是最容易理解的。