繁体   English   中英

C中的运算符优先级

[英]Operator precedence in C

在执行以下表达式时C prog中会发生什么:x = 4 + 2%-8; 它输出的答案是6,但是我不知道该代码段的实际执行方式?

在这种情况下,-是一元否定运算符(不是减法),由于它具有很高的优先级,因此与8文字紧密绑定。 请注意,形式上c中没有负数文字。

因此,模量项被评估为2%(-8)。 模运算符的优先级与乘法和除法相同。

该语言没有定义其执行方式,因为该表达式的顺序不足以强制执行特定的执行计划(评估顺序)。

我们可能会告诉您的是它的计算结果 由于您没有为我们提供x的确切类型,因此实际上不可能说出整个表达式的计算结果。 因此,我将考虑限制在4 + 2 % -8子表达式中。

该子表达式分组为

4 + (2 % (-8))

由于在现代C中2 / (-8)0 ,因此2 % (-8)2 因此,上述子表达式的计算结果为6

PS请注意,在C89 / 90 2 / (-8)可以合法地评估为-1 ,而2 % (-8)评估为-6 整个结果将等于-2

表达式首先赋予%优先级,因此它求(2 % -8) = 2 ,然后再加上4 所以ans是4 + 2 = 6

这是给您的快速参考

一元-运营商在这里有最高的优先级。

%运算符的优先级等于/*运算符的优先级,因此比+运算符的优先级高。

底线4 + 2 % -8等于4 + (2% (-8))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM