关于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)是从左往右执行,遇到括号了再执行括号里面的?
请教高手,在带有括号的表达式里面到底是先计算括号里面的表达式还是从左往右顺序执行,遇到括号了再执行括号里面的啊 展开
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)是从左往右执行,遇到括号了再执行括号里面的?
请教高手,在带有括号的表达式里面到底是先计算括号里面的表达式还是从左往右顺序执行,遇到括号了再执行括号里面的啊 展开
4个回答
展开全部
对于这个是从左到右依次计算的,
即: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语言里的表达式运算是与运算符的优先级和结合性这两个有关的。
展开全部
第一,不要用这种方法实现两数的交换,这种做法根本没有考虑溢出的问题
第二,a = a + b - (b = a),这个表达式本身就是一个错误的表达式,变量的值依赖于确定的求值顺序,而C本身没有强制规定表达式求值顺序,这是一个不确定的行为
第二,a = a + b - (b = a),这个表达式本身就是一个错误的表达式,变量的值依赖于确定的求值顺序,而C本身没有强制规定表达式求值顺序,这是一个不确定的行为
追问
溢出的问题我知道,只是比较好奇这种做法,如果这是不确定行为,是不是就意味着不同的编译器有不同的执行顺序啊??
追答
是
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
从左往右然后遇到括号就计算括号的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
运行顺序是这样的:
1.先将a的值赋给b,b=1;
2.然后a+b=11
3.11-1=10
4.将10赋给a
不知道这样写楼主能看明白吗?
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,这个赋值仅限于括号内, 你可以试数啊。
后来我帮你运行了一下,结果是可以实现俩数交换的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询