关于C语言中优先级及括号的问题

#include<stdio.h>intmain(void){inta=1;intb=10;a=a+b-(b=a);printf("a=%d\nb=%d\n",a,b);... #include <stdio.h>
int main(void)
{
int a = 1;
int b = 10;
a = a + b - (b = a);
printf("a = %d\nb = %d\n", a, b);

return 0;

}
这样能实现2个数的交换,那么在语句a = a + b - (b = a)这个语句中执行顺序该怎么解释?
是先执行(b = a)这句话吗?如果是先执行这句的话,根本不能实现交换啊?还是说a = a + b - (b = a)是从左往右执行,遇到括号了再执行括号里面的?
请教高手,在带有括号的表达式里面到底是先计算括号里面的表达式还是从左往右顺序执行,遇到括号了再执行括号里面的啊
展开
 我来答
WindCoder
2013-04-26 · TA获得超过178个赞
知道小有建树答主
回答量:196
采纳率:0%
帮助的人:66.5万
展开全部

对于这个是从左到右依次计算的,

即:a+b=11;

     b=a=1;

     11-1=10;

至于括号问题要适具体情况而定,毕竟各运算符号有不同的运算优先级与结合性。

http://baike.baidu.com/view/1516130.htm#2 百度百科“C语言运算符”
http://www.slyar.com/blog/c-operator-priority.html 网上的“C语言运算符优先级 详细列表”

具体的可以看看以上这两个网页里的内容。总之,C语言里的表达式运算是与运算符的优先级和结合性这两个有关的。

shine1991
科技发烧友

2013-04-26 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部
第一,不要用这种方法实现两数的交换,这种做法根本没有考虑溢出的问题
第二,a = a + b - (b = a),这个表达式本身就是一个错误的表达式,变量的值依赖于确定的求值顺序,而C本身没有强制规定表达式求值顺序,这是一个不确定的行为
追问
溢出的问题我知道,只是比较好奇这种做法,如果这是不确定行为,是不是就意味着不同的编译器有不同的执行顺序啊??
追答
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b36f72a
2013-04-26 · TA获得超过1417个赞
知道小有建树答主
回答量:744
采纳率:0%
帮助的人:547万
展开全部
从左往右然后遇到括号就计算括号的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
duanbiaowuhao
2013-04-26 · TA获得超过393个赞
知道小有建树答主
回答量:599
采纳率:50%
帮助的人:225万
展开全部
运行顺序是这样的:
1.先将a的值赋给b,b=1;
2.然后a+b=11
3.11-1=10
4.将10赋给a
不知道这样写楼主能看明白吗?
更多追问追答
追问
你要是先将a的值附给b,此时b = 1, a + b = 1 + 1 =2啊,不知道这样写你看明白没
追答
a=b,这个赋值仅限于括号内, 你可以试数啊。
后来我帮你运行了一下,结果是可以实现俩数交换的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式