在C语言中,乘法和除法哪个优先级更高?

10
#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; 
}

输出 3 1

在(1)中,乘法比除法具有更高的优先级,而在(2)中则相反。为什么会这样?


2
无论哪个在另一个的左边... - TheCodeArtist
如果有一個問題,其中某些運算符的結合性為從左到右,而其他運算符的結合性卻是從右到左,該怎麼辦? - dee
并非每个运算符都具有相同的结合性,但是具有相同优先级的不同运算符具有相同的结合性,因此这不是问题。 - effeffe
3个回答

31

它们具有相同的优先级并且总是从左到右执行。

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)

2

在这种情况下,从左到右进行计数。 但无论如何! 在一些学术文献中,隐含乘法被解释为比除法具有更高的优先级。因此,这可以被看作是另一种方式。 这也是数学家或医生试图避免使用这种符号并首先写分数的原因。


2
我认为你所说的“physician”应该是指“physicist”,而“fraction”应该是指“decimal”。 - james turner
是的,“physician”基本上不就是“医生”的另一个说法吗? :-) - avl_sweden
https://en.wikipedia.org/wiki/Order_of_operations#Mixed_division_and_multiplication - Alan

1

我的朋友,乘法和除法具有相同的优先级。但在你写的这段代码中,两者都出现在一个表达式中。因此,当两个运算符在一个表达式中同时出现时,我们要检查“结合性”,这里是“从左到右”。

1)it will first solve multiplication than division.left to right

一个在

2)it will first solve % then * than /.left to right

如果想要了解更多关于C语言运算符的结合性和优先级的信息,请仔细阅读相关资料,可以在互联网上轻松找到。


如果有一个问题的结合性对于某些人是从左到右,而对于其他人则是从右到左呢? - dee
首先,它是预定义的,并且通常大多数算术运算符具有从左到右的结合性。 - Prashant Anuragi
对于递增和递减运算符,它们是从右到左执行的,并且被广泛使用,这就是我提出问题的原因。 - dee
并且它们比算术运算符具有更高的优先级,因此在这种情况下将首先进行评估。 - Prashant Anuragi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接