[英]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.