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

询问C++最高优先级运算符作用范围及指定代码输出0的原因

为什么这段C++代码输出0?

先看代码:

int a = 1, b = 2, c = 3;
bool z = a >= b || b == c && !b && !!a;
cout << z << endl;

要搞懂输出0的原因,得从运算符优先级和结合性入手,相关运算符的优先级从高到低排序是:!(逻辑非) > >=、==(关系运算符,优先级相同) > &&(逻辑与) > ||(逻辑或)。下面一步步拆解表达式:

第一步:处理最高优先级的!

  • !!a:a是1,!1结果为false(0),再取一次非!!1结果为true(1)
  • !b:b是2,非0值取非结果为false(0)

第二步:处理关系运算符>=和==

这俩优先级相同,按左结合顺序计算:

  • a >= b:a=1,b=2,1>=2不成立,结果为false(0)
  • b == c:b=2,c=3,2==3不成立,结果为false(0)

第三步:处理&&逻辑与

&&优先级比||高,所以先计算||右侧的所有&&部分:

  • 先算b == c && !b:false && false → false
  • 再算上面的结果和!!a的与:false && true → false

第四步:处理||逻辑或

现在表达式简化成false || false,结果为false(0),所以变量z的值是0,输出就是0。

解答你的疑问

  1. >=的优先级远高于||和&&,所以它只会和紧邻的左右操作数a和b结合,形成独立子表达式a >= b,不会把后面的b == c && !b && !!a作为整体和a比较。
  2. 优先级最高的运算符(这里是!)会作用于它右侧紧邻的单个操作数:比如!b直接作用于变量b,!!a则是先对a取非,再对这个取非的结果再次取非,是嵌套作用的。而像>=这种优先级次高的运算符,也是作用于左右紧邻的操作数,形成独立的子表达式后,再参与后续运算。

内容的提问来源于stack exchange,提问作者rebecca wong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:46:02