C中的运算符优先级

时间:2016-09-25 15:57:35

标签: c expression

执行以下表达式时,C prog中会发生什么: x = 4 + 2% - 8; 它输出的答案是6,但我没有得到这个片段实际执行的方式?

4 个答案:

答案 0 :(得分:2)

在这种情况下 - 是一元否定运算符(不是减法)并且它与8字面紧密绑定,因为它具有非常高的优先级。请注意,正式地说c中没有负面文字这样的东西。

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

答案 1 :(得分:2)

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

我们可以告诉你的是它评估的内容。由于您没有向我们提供x的确切类型,因此无法确定整个表达式的评估结果。出于这个原因,我将限制考虑4 + 2 % -8子表达式。

此子表达式分组为

4 + (2 % (-8))

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

P.S。请注意,在C89 / 90中,2 / (-8)可以合法评估为-12 % (-8)评估为-6。整个事情将评估为-2

答案 2 :(得分:1)

表达式首先优先于%,因此它会评估(2 % -8) = 2,然后将4添加到其中。所以ans是4 + 2 = 6

Here is quick reference for you

答案 3 :(得分:0)

一元-运算符的优先级最高。

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

底线,4 + 2 % -8相当于4 + (2% (-8))