为变量应用掩码后if语句未执行的原因咨询
问题原因与解决方法
问题核心是C语言运算符优先级导致的逻辑错误:相等运算符==的优先级高于按位与运算符&,你的带掩码判断语句实际执行顺序和预期不符。
举个例子,你写的第二个if语句:
if (testVar & 0x000000FF == 0x000000A1)
编译器会先计算0x000000FF == 0x000000A1——显然0xFF和0xA1不相等,这个判断结果是0(假)。接着计算testVar & 0,结果必然是0,条件不成立,所以不会执行printf("success2");。
第三个if语句的问题完全相同:0x000000FF == 0xA1同样为假,结果为0,testVar & 0还是0,条件不成立。
修正方案
给按位与的表达式加上括号,强制让testVar & 0x000000FF先执行,再和目标值做相等判断。同时注意标准C中main函数的返回类型应该是int,而非void,修正后的完整代码如下:
#include <stdio.h> int testVar = 0xA1; int main() { printf("%x \n", testVar); printf("%x \n", testVar & 0x000000FF); if (testVar == 0x000000A1) { printf("success1"); } if ((testVar & 0x000000FF) == 0x000000A1) { printf("success2"); } if ((testVar & 0x000000FF) == 0xA1) { printf("success3"); } return 0; }
内容的提问来源于stack exchange,提问作者bangingmyheadontable
相关产品推荐
相关产品推荐

