在我的示例中,我创建了一个名为 testVar 的整数变量,并使其等于十六进制的 a1。当打印出变量时,它表明它确实应该等于十六进制的a1。现在,当检查 if 语句中的 testVar 是否等于 a1 时,if 语句仅在没有任何掩码应用于变量时执行。
我的问题是“为什么当变量应用了掩码时这些 if 语句不执行?”。
#include <stdio.h>
int testVar = 0xA1; // testVar should equal 0x000000A1 now
void main() {
printf("%x \n", testVar); // Should prove that testVar is indeed equal to a1 in hex
printf("%x \n", testVar & 0x000000ff); // Both printf functions are outputting a1
if (testVar == 0x000000A1) { // This 'if' statement works!
printf("success1");
}
if (testVar & 0x000000ff == 0x000000A1) { // This doesn't execute
printf("success2");
}
if (testVar & 0x000000FF == 0xA1) { // This doesn't execute
printf("success3");
}
}
等号运算符
==
的优先级高于二进制按位与运算符 &
。 这意味着:
if (testVar & 0x000000ff == 0x000000a1)
解析如下:
if (testVar & (0x000000ff == 0x000000a1))
这不是你想要的。 使用括号确保正确分组:
if ((testVar & 0x000000ff) == 0x000000a1)
同样:
if ((testVar & 0x000000ff) == 0xa1)