执行以下表达式时,C prog中会发生什么: x = 4 + 2% - 8; 它输出的答案是6,但我没有得到这个片段实际执行的方式?
答案 0 :(得分:2)
在这种情况下 - 是一元否定运算符(不是减法)并且它与8字面紧密绑定,因为它具有非常高的优先级。请注意,正式地说c中没有负面文字这样的东西。
因此,模数项评估为2%( - 8)。模数运算符与乘法和除法具有相同的优先级。
答案 1 :(得分:2)
该语言未定义执行的方式,因为表达式没有足够的顺序来强制执行特定的执行计划(评估顺序)。
我们可以告诉你的是它评估的内容。由于您没有向我们提供x
的确切类型,因此无法确定整个表达式的评估结果。出于这个原因,我将限制考虑4 + 2 % -8
子表达式。
此子表达式分组为
4 + (2 % (-8))
由于现代C中的2 / (-8)
为0
,2 % (-8)
为2
。因此,上述子表达式的计算结果为6
。
P.S。请注意,在C89 / 90中,2 / (-8)
可以合法评估为-1
,2 % (-8)
评估为-6
。整个事情将评估为-2
。
答案 2 :(得分:1)
表达式首先优先于%
,因此它会评估(2 % -8) = 2
,然后将4
添加到其中。所以ans是4 + 2 = 6
。
答案 3 :(得分:0)
一元-
运算符的优先级最高。
%
运算符的优先级等于/
和*
运算符的优先级,因此高于+
运算符的优先级。
底线,4 + 2 % -8
相当于4 + (2% (-8))
。