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

就是,例如:*和%;x+a%3*(int)(x+y)%2/4运算顺序是什么样的。请一步步详细说明。(先运算什么,再运算什么。)... 就是,例如:*和%;
x+a%3*(int)(x+y)%2/4
运算顺序是什么样的。
请一步步详细说明。(先运算什么,再运算什么。)
展开
 我来答
吉祥二进制
高粉答主

2015-05-25 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84564

向TA提问 私信TA
展开全部

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

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

百度网友438274c
2007-12-28
知道答主
回答量:26
采纳率:0%
帮助的人:0
展开全部
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++上运行过了,没有错的!:-)放心!!呵呵, 我就是学这个的!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
玉枫孤雨
2007-12-28 · TA获得超过233个赞
知道答主
回答量:123
采纳率:0%
帮助的人:0
展开全部
C语言中同等级运算的先后顺序由其运算方向决定。其中只有优先级为2、13、14为自右向左,其余为自左向右。

上式为先算(x+y),再类型转换,再算3*(int)(x+y),再算2/4 ,再算a%3*(int)(x+y),再就是a%3*(int)(x+y)%2/4,然后就是加法喽。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Bwxwle
2007-12-28 · TA获得超过721个赞
知道小有建树答主
回答量:332
采纳率:0%
帮助的人:309万
展开全部
我认为同等级的按从右至左的顺序运算可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式