我希望检查一个32位寄存器中是否设置或清除了多个位,以便于操作硬件。我采用以下方法来检查所需位(第8位和第1位)的状态,这个32位无符号整数变量名为statusRegister
:
if ((statusRegister & 0x00000102) == 0x00000102) {}
接下来是检查所需位是否清除的代码:
if ((statusRegister | ~0x00000102) == ~0x00000102) {}
这样正确吗?有更简洁的方法来完成它吗?
我希望检查一个32位寄存器中是否设置或清除了多个位,以便于操作硬件。我采用以下方法来检查所需位(第8位和第1位)的状态,这个32位无符号整数变量名为statusRegister
:
if ((statusRegister & 0x00000102) == 0x00000102) {}
接下来是检查所需位是否清除的代码:
if ((statusRegister | ~0x00000102) == ~0x00000102) {}
这样正确吗?有更简洁的方法来完成它吗?
要检查多个位是否已清除,通常可以使用这种更为简洁的习惯用语:
if ((statusRegister & 0x00000102) == 0) {}
// or
if (!(statusRegister & 0x00000102)) {}
你还可以使用以下方法检查多个位是否被设置:
if ((statusRegister | ~0x00000102) == ~0) {}
// or
if (!(~statusRegister & 0x00000102)) {}
但你问题中的版本更为常见。用位掩码进行与运算是最简单的思维模型,也是最容易让其他程序员理解的方法。
(statusRegister & 0x00000102) == 0
来实现。 - Some programmer dude