Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C解释中的运算符优先级_C_Operator Precedence - Fatal编程技术网

C解释中的运算符优先级

C解释中的运算符优先级,c,operator-precedence,C,Operator Precedence,我有以下代码: #include<stdio.h> void main(){ int x; x=1%9*4/5+8*3/9%2-9; printf("%d \n", x); } 有人能解释输出是如何 -9 < /C> > < /p> < p>看来,你认为模比乘法和除法具有更低的优先级,而实际上它没有。而不是 x = 1%9*4/5+8*3/9%2-9 == 1*4/5+24/9%2-9 == 4/5+2%2-9 == 0+0-9 == -9 x = (1 % ((9 * 4) /

我有以下代码:

#include<stdio.h>
void main(){
int x;
x=1%9*4/5+8*3/9%2-9;
printf("%d \n", x);
}

有人能解释输出是如何<代码> -9 < /C> > < /p> < p>看来,你认为模比乘法和除法具有更低的优先级,而实际上它没有。而不是

x = 1%9*4/5+8*3/9%2-9
== 1*4/5+24/9%2-9
== 4/5+2%2-9
== 0+0-9
== -9
x = (1 % ((9 * 4) / 5)) + (((8 * 3) / 9) % 2) - 9;
你的表达真正代表了

x = (((1 % 9) * 4) / 5) + (((8 * 3) / 9) % 2) - 9;

第一乘法中的模在乘法和除法之前被应用。

看来,你认为模比乘法和除法具有较低的优先权,而实际上它没有。而不是

x = (1 % ((9 * 4) / 5)) + (((8 * 3) / 9) % 2) - 9;
你的表达真正代表了

x = (((1 % 9) * 4) / 5) + (((8 * 3) / 9) % 2) - 9;

第一个和中的模在乘法和除法之前应用。

所有这些运算符
*,/,%
都属于乘法运算符的范畴。它们的分组在C++标准(同样适用于C标准)中更清楚地描述了5.6个乘法算子:

1乘法运算符*、/、和%从左向右分组

因此这句话的意思是

x=1%9*4/5+8*3/9%2-9;
x = (( ( 1 % 9 ) * 4 ) / 5 ) + ( ( ( 8 * 3 ) / 9 ) % 2 ) - 9;
相当于下面的语句

x=1%9*4/5+8*3/9%2-9;
x = (( ( 1 % 9 ) * 4 ) / 5 ) + ( ( ( 8 * 3 ) / 9 ) % 2 ) - 9;

所有这些操作符都属于乘法操作符的范畴。它们的分组在C++标准(同样适用于C标准)中更清楚地描述了5.6个乘法算子:

1乘法运算符*、/、和%从左向右分组

因此这句话的意思是

x=1%9*4/5+8*3/9%2-9;
x = (( ( 1 % 9 ) * 4 ) / 5 ) + ( ( ( 8 * 3 ) / 9 ) % 2 ) - 9;
相当于下面的语句

x=1%9*4/5+8*3/9%2-9;
x = (( ( 1 % 9 ) * 4 ) / 5 ) + ( ( ( 8 * 3 ) / 9 ) % 2 ) - 9;

我得到
1%9*4/5+8*3/9%2-9
成为
(1%9*4/5)+(8*3/9%2)-9
。乘法、除法和模运算都具有相同的从左到右的结合性。
void main
是错误的
main
应返回
int
。可能您误解了将乘法、除法和模列为具有相同优先级的三个运算符的优先级表。
1%9*4/5
从左到右求值;相同的优先级,所以它是
((1%9)*4)/5
。我得到
1%9*4/5+8*3/9%2-9
(1%9*4/5)+(8*3/9%2-9
。乘法、除法和模运算都具有相同的从左到右的结合性。
void main
是错误的
main
应返回
int
。可能您误解了将乘法、除法和模列为具有相同优先级的三个运算符的优先级表。
1%9*4/5
从左到右求值;相同的优先级,因此它是
((1%9)*4)/5
。添加如何计算它的说明将有帮助添加如何计算它的说明将有帮助