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

strange result with operators precedence in C

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

int a;
a=12/8*8;

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

谢谢。

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

a=(12/8)*8;

除法是整数除法,所以结果是1,因为小数部分被截断了。然后乘以 8,导致 8 被分配给 a

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

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

由于整数除法

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

因此,最终值为8