C中运算符优先级的奇怪结果

时间:2016-02-26 19:56:28

标签: c operator-precedence

我只是有一个简单的问题,我知道C语言,前一段时间我遇到了这段代码:

int a;
a=12/8*8;

我尝试使用代码块,结果是a = 8 !!!!!
编译器是如何处理的?

感谢。

2 个答案:

答案 0 :(得分:4)

乘法运算符和除法运算符具有相同的优先级,并从左到右进行求值。所以上面相当于:

a=(12/8)*8;

除法是整数除法,因此结果为1,因为小数部分被截断。然后将其乘以8,从而将8分配给a

答案 1 :(得分:3)

由于运算符优先级(*和/具有相同的优先级)和关联性(它们具有从左到右的关联性)

12/8*8 is equal to (12/8)*8

由于整数除法

(12/8)*8 is equal to (1)*8

因此,最终值为8