在我的示例中,我创建了一个名为 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)