You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:54:03