检查是否设置或清除了多个位

时间:2019-01-24 09:08:13

标签: c bit-manipulation

我希望检查是否为了操作硬件而设置或清除了32位寄存器中的多个位。我采用以下方法来检查是否设置了uint32_t变量statusRegister的所需位(位8和位1):

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

然后检查以下内容是否清除了所需位:

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

这是正确的吗?有更简洁的方法吗?

1 个答案:

答案 0 :(得分:3)

要检查是否清除了多个位,通常会使用以下更简洁的习惯用法:

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

您还可以使用以下方法检查是否设置了多个位:

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

但是问题中的版本更为常见。用位掩码进行“与”运算是最简单的思维模型,对您的程序员来说也是最容易理解的。