C++中两个uint64_t数按位与运算出现非预期结果原因求解
成因说明
这一现象是C++运算符优先级规则直接导致的:
- C++标准中,相等运算符
==的优先级远高于按位与运算符&,因此第二段代码的if(num1 & num2 == 0)不会按照预期的逻辑执行。 - 实际执行顺序为:先计算
num2 == 0,这里你的num2值为0,因此这个判断的结果为布尔值true,对应隐式转换为整数值1;再计算num1 & 1,你的num1值为0,最终运算结果为0,if判断会将0识别为假,因此不会进入打印分支。 - 第一段代码中你提前单独计算了
num1 & num2的结果,再和0做相等判断,完全符合预期运算顺序,因此可以正常输出结果。
修复方案
如果要省略中间变量,只需要给按位与运算添加括号强制优先级即可:
if( (num1 & num2) == 0 ) { std::cout << "It got here!\n"; }
内容的提问来源于stack exchange,提问作者MrPontes
相关产品推荐
相关产品推荐

