#include <stdio.h>
int main(void)
{
int w=2*3/2; //1
int x=5%2*3/2; //2
printf("%d %d",w,x);
return 0;
}
OUTPUT 3 1
在(1)中;它在乘法上优先于除法,而在(2)中则相反。为什么这样?
答案 0 :(得分:26)
它们具有相同的优先级,并且始终从左到右执行。
2*3/2 = (2*3)/2 => 3
6/2 => 3
和
5%2*3/2 = ((5%2)*3)/2 => 1
(1*3)/2 => 1
3/2 => 1 (integer gets truncated)
答案 1 :(得分:2)
我的朋友乘法和除法具有相同的优先级。但是在你编写的这段代码中,两个一起出现在表达式中当两个运算符在一个表达式中聚集在一起时,我们在这里检查“Associativity”它是“从左到右”所以在
1)it will first solve multiplication than division.left to right
a in
2)it will first solve % then * than /.left to right
有关更多信息,请仔细阅读C中运算符的关联性和优先级,您可以在互联网上轻松找到它。
答案 2 :(得分:2)
在这种情况下左右计数。 但无论如何! 在一些学术文献中,隐含乘法被解释为具有比除法更高的优先权。所以有一种不同的方式可以看出来。 这也是数学家或医生首先试图避免使用这种符号并写下一小部分的原因。