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
。
我只是有一个简单的问题,我知道 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
。