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
。添加如何计算它的说明将有帮助添加如何计算它的说明将有帮助