C说明中的运算符优先级

时间:2017-07-30 12:49:35

标签: 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。当我尝试根据运算符优先级(* / %,Multiplication/division/modulus,left-to-right)细分代码时,答案结果为-8

以下是代码的细分:

x=1%9*4/5+8*3/9%2-9;
x=1%36/5+24/9%2-9;
x=1%7+2%2-9;
x=1+0-9;
x=-8;

有人可以解释输出是如何-9

3 个答案:

答案 0 :(得分:2)

看起来你认为模数的优先级低于乘法和除法,而事实上并非如此。而不是

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

你真正代表的表达

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

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

答案 1 :(得分:1)

0
1
2
0
1
2

答案 2 :(得分:1)

所有这些运算符*, /, %都属于乘法运算符的类别。他们的分组在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;