如果运算符具有最高优先级,它适用于哪些子表达式?

问题描述 投票:0回答:2
int a = 1, b = 2, c = 3;
bool z = a >= b || b == c && !b && !!a;
cout << z << endl;

我想知道为什么这段代码会打印

0

我不知道从哪里开始,尽管我知道

>=
具有最高优先级。 这是否意味着
a
与所有
(b || b == c && !b && !!a)
进行比较,还是仅与
b
进行比较?

c++ expression operator-precedence
2个回答
2
投票

运算符具有更高的优先级意味着它首先被评估;

x >= y || z
表示
(x >= y) || z

(这是有道理的,因为你希望
a < b || c < d
是“a 小于 b,或 c 小于 d”,而不是“a 小于(b 或 c)小于 d”,这是无意义的。)

要解决这个问题,请从最高优先级到最低优先级添加括号。

!
的优先级最高,所以

a >= b || b == c && (!b) && (!(!a))

接下来是关系运算符,

(a >= b) || b == c && (!b) && (!(!a))

然后平等,

(a >= b) || (b == c) && (!b) && (!(!a))

然后

&&
,与左侧关联:

(a >= b) || (((b == c) && (!b)) && (!(!a)))

然后只剩下

||
,所以你不需要做任何事情。

所以你有

(1 >= 2) || (((2 == 3) && (!2)) && (!(!1)))

这是

(1 >= 2) || (((2 == 3) && (2 == 0)) && (!(1 == 0)))

这是

false || ((false && false) && true)

这是

false

1
投票

我知道

>=
具有最高优先级,但这是否意味着
a
与整个
(b || b == c && !b && !!a )
进行比较?或者只是
b

好吧,让我们想想。假设你有

1 * 2 + 3
。从您使用的相同优先级表中,您可以看到
*
的优先级高于
+
。这是否意味着
1
乘以
2 + 3
还是只是
2

© www.soinside.com 2019 - 2024. All rights reserved.