C语言中同等级运算的先后顺序

就是,例如:*和%;
x+a%3*(int)(x+y)%2/4
运算顺序是什么样的。
请一步步详细说明。(先运算什么,再运算什么。)

  同等级的运算符,先后顺序按结合性来进行。下面的代码有利于理解结合性。

  int a,b=1,c=2;
  a=b=c;

  上面的代码是先执行b=c呢?还是先执行a=b。如果按前者,a=结果为2,如果按后者,a的结果为1。所有的赋值符(包括复合赋值)都具有右结合性,就是在表达式中最右边的操作最先执行,然后从右到左依次执行。这样,c先赋值给b,然后b在赋值给a,最终a的值是2。

  所有优先级相同的操作符,它们的结合性也相同。这是必须如此的,否则结合性依然无法消除歧义,如果在计算表达式的值时需要考虑结合性,那么最好把这个表达式一分为二或者使用括号。

  例:

  a=b+c+d

  =是右结合的,所以先计算(b+c+d),然后再赋值给a

  +是左结合的,所以先计算(b+c),然后再计算(b+c)+d


  在C语言中有少数运算符在C语言标准中是有规定表达式求值的顺序的:

  1:&& 和 || 规定从左到右求值,并且在能确定整个表达式的值的时候就会停止,也就是常说的短路。

  2:条件表达式的求值顺序是这样规定的:

  test ? exp1 : exp2;

  条件测试部分test非零,表达式exp1被求值,否则表达式exp2被求值,并且保证exp1和exp2两者之中只有一个被求值。

  3:逗号运算符的求值顺序是从左到右顺序求值,并且整个表达式的值等于最后一个表达式的值,注意逗号','还可以作为函数参数的分隔符,变量定义的分隔符等,这时候表达式的求值顺序是没有规定的!

温馨提示:内容为网友见解,仅供参考
第1个回答  2007-12-28
C语言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行,如先乘除后加减。如果在一个运算符对象两侧的运算符的优先级别相同,如a-b+c,则按规定的“结合方向”处理。

C规定了各种运算符的结合方向(结合性),算术运算符的结合方向为“自左至右”,即先左后右,因此a-b+c先执行a-b的运算,再执行加c的运算。结合性有“左结合性”和“右结合性”(赋值运算符为特例)。

所以你给出的例子的运算顺序为:
1. (int)(x+y)
2. a%3
3. (a%3)*(int)(x+y)
4. ((a%3)*(int)(x+y))%2
5. (((a%3)*(int)(x+y))%2)/4.
GAME OVER
呵呵,就是这样的。你自己根据优先级和结合性再自己判断一下吧。
我已经帮你在Visual C++上运行过了,没有错的!:-)放心!!呵呵, 我就是学这个的!本回答被提问者采纳
第2个回答  2007-12-28
C语言中同等级运算的先后顺序由其运算方向决定。其中只有优先级为2、13、14为自右向左,其余为自左向右。

上式为先算(x+y),再类型转换,再算3*(int)(x+y),再算2/4 ,再算a%3*(int)(x+y),再就是a%3*(int)(x+y)%2/4,然后就是加法喽。
第3个回答  2007-12-28
我认为同等级的按从右至左的顺序运算可以

C语言中同等级运算的先后顺序
同等级的运算符,先后顺序按结合性来进行。下面的代码有利于理解结合性。int a,b=1,c=2;a=b=c;上面的代码是先执行b=c呢?还是先执行a=b。如果按前者,a=结果为2,如果按后者,a的结果为1。所有的赋值符(包括复合赋值)都具有右结合性,就是在表达式中最右边的操作最先执行,然后从右到左依...

C语言的运算符的优先级是什么?
7、第七级:&&、|| 逻辑与&&优先级大于逻辑或||。8、第八级:? :也称为条件运算符号,是C语言中唯一的一个三目运算符,结合顺序是从右往左。9、第九级:=、+=、-+、*=、\/=、%= 这些运算符也叫做赋值运算符,除此之外,>>=、<<=、&=、^=、|=这些赋值运算符也在这一...

c语言运算符优先级顺序表
C语言中,运算符的优先级可以分为不同级别,具体优先级顺序如下:最高优先级:单目运算符(如取反、乘方等)、赋值运算符(=、+=、-=、*=等)、逻辑非运算符(!)、关系运算符(<、<=、>、>=等)、相等运算符(==、!=等)、按位与运算符(&)、按位异或运算符(^)、按位或运算符(|...

c语言运算符的优先级顺序
c语言运算符优先级从高到低的顺序依次如下:优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。不同类型的运算符之间也有相应的优先级...

请告诉我:C语言中运算的优先级先后顺序
运算符的优先级中同级别的不分先后顺序,但是需要注意,表达式本身的运算顺序,如果表达式本身是从左向右算的,如逗号表达式,那么即使同级别的,那也得按照先左后右的顺序,比如=表达式,是从右向左算的,那就得按照先右后左的顺序

c语言优先级是什么?
c语言优先级是:每种同类型的运算符都有内部的运算符优先级,不同类型的运算符之间也有相应的优先级顺序。一个表达式中既可以包括相同类型的运算符,也可以包括不同类型的运算符或者函数。第七级:&&、||逻辑与&&优先级大于逻辑或||。第八级:?:也称为条件运算符号,是C语言中唯一的一个三目运算...

c语言中运算符有哪几种,优先级顺序是怎样
C语言中,运算符除了常见的三大类,算术运算符、关系运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符。运算符的运算优先级共分为15 级,1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定...

c语言优先级排序图片
c语言优先级是什么?c语言优先级是:每种同类型的运算符都有内部的运算符优先级,不同类型的运算符之间也有相应的优先级顺序。一个表达式中既可以包括相同类型的运算符,也可以包括不同类型的运算符或者函数。第七级:&&、||逻辑与&&优先级大于逻辑或||。第八级:?:也称为条件运算符号,是C语言中...

c语言中,同一运算符之间运算次序存在什么规则
左结合性”。而自右至左的结合方向称为“右结合性”。 最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。(上文的优先级有分辨左右结合性)。

c语言中优先级相同的运算符,结合方向为自左向右还是自右向左?_百度知...
基本上除了赋值运算符一类的,其他都是从左向右。

相似回答