C 中的运算符优先级
printf ("%d \n", 2 > !3 && 4 - 1 != 5 || 6 ) ;
有人可以向我解释一下这是如何评估的吗?我最困惑的是 3... 如何评估 2 > 前面的
?!
符号!3
printf ("%d \n", 2 > !3 && 4 - 1 != 5 || 6 ) ;
Can someone explain to me how this is evaluated ? What I am most confused about is the !
symbol in front of the 3... how to evaluate 2 > !3
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
!逻辑上不是。这意味着它对于 0 返回 1,或者对于任何其他值返回 0。
所以在你的例子中
2 > !3
将被评估2 > 0
是1
对于你的整个表达式,你将有
! is the logical not. Meaning it returns 1 for 0 or 0 for any other value.
So in your example
2 > !3
will be evaluted2 > 0
which is1
For your whole expression you will have
下面是运算符优先级表。由此我们可以推断出在您的表达式中
!
具有最高优先级-
接下来>
接下来&&
接下来是||
接下来是!
表示逻辑不是!0 == 1
,!anythingElse == 0 。
表达式的计算结果为
通常,操作数的计算顺序是未指定的,因此在
编译器可以在计算
2
之前自由计算!3
但是,对于&&和 || 时,总是首先评估左侧,以便可以使用短路(使用
&&
如果左侧为 false (0),则不评估右侧,使用 < code>|| 如果左侧为 true(除 0 以外的任何值),则不评估右侧)。在上面的代码中,6
永远不会被计算,因为||
的左侧为 true。 6是正确的,所以右侧永远不会被评估。
Here is a table of operator precedence. From this we can deduce that in your expression
!
has the highest precedence-
comes next>
comes next!=
comes next&&
comes next||
comes next!
means logical not!0 == 1
,!anythingElse == 0
.The expression is evaluated as
Generally, the order of evaluation of the operands is unspecified, so in the case of
the compiler is free to evaluate
!3
before evaluating2
However, for && and ||, the left side is always evaluated first so that short circuiting can be used (with
&&
if the left side is false (0), the right side is not evaluated, with||
if the left side is true (anything but 0), the right side is not evaluated). In the above, the6
would never be evaluated because the left side of||
is true. With6 is true so the right side will never be evaluated.
这 !对 0 中的值进行符号转换为二进制,因此 2>!3 意味着 2>0 并且这始终为真,并且 4-1 等于 3 不等于 5||6。 5||6 总是给你 1 所以整个命令 print 1
the ! sign convert the value in 0 in binary so 2>!3 means 2>0 and this will be always true and 4-1 equals to 3 not equals to 5||6. 5||6 gives you 1 always so the whole command print 1
最好使用括号来确定自己的顺序。否则,C 运算符优先级表中对运算符优先级进行了说明。
从上面的链接:
Its best to use parentheses to have your own order. Otherwise, operator precedence is explained in the C Operator Precedence Table.
From the above link: