C语言高手速来~~~

1a=1a+=a-=a+aa=?2a=1b=(a++)+(++a)b+?简述理由~~~第一个式子为什么是从右往左第二个(a++)+(++a)为什么是从左往右晕b到底等于几... 1 a=1 a+=a-=a+a
a=?
2 a=1 b=(a++)+(++a)
b+?
简述理由~~~
第一个式子 为什么 是从右往左
第二个 (a++)+(++a)为什么是从左往右

晕 b到底等于几 ?给个准信。。 再分析一下!
展开
 我来答
lyqf365
2013-03-11 · TA获得超过1185个赞
知道小有建树答主
回答量:1291
采纳率:100%
帮助的人:780万
展开全部
这个拆开就知道了
1. a = 1 a+=a-=a+a;
先算a+a 为 2,并记下这个值
a -= 2
这时 a值为 -1

a += -1
最后 a 为 -2

2 a =1 b=(a++) +(++a)
这个 b的结果为3 或 4, a 为3
这个是属于C标准中的未定义行为,如果你是一个管理人员,你的员工写出这种代码,你可以fire掉他了。

给你补充一下第二个问题,这个之所以说是,3或4,是因为这行代码是有问题的,可以认为这是一个有歧义的语句,因为不同的编译器会做不同的处理。
有的可能会把 a++ 中a的值先拿出来,也就是1, 再把++a的值拿出来,也就是2,并把置为2,再把1+2的值传为b,这样就是3了,也有的是,把所有的前自增放在前面自增完了再用,这时可以拆成
a=1;
a+=1;
b= a + a;
a+=1;
这样b就是4了。
语言标准里是明确指出,这是一种未定义行为的,如果你的编译器对标准严格支持,那么这类代码是不应该通过编译的,换言之,这代码是错的。
necther
2013-03-11 · TA获得超过203个赞
知道小有建树答主
回答量:267
采纳率:0%
帮助的人:140万
展开全部
这是编程里面的,要从右向左看,意思是将等号右边的计算结果赋值给等号左边的变量(本题中等号左边的变量即为a),可以拆分成两个式子:
1. a-=a+a;
2. a+=(a-=a+a);
+=、-=这两个符号好像是为了节约内存什么的而设计的,上面两个式子的真实意思为:
1. a=a-(a+a);
2. a=a+(第一个式子的计算结果)
由于是从右向左的,所以需要先计算整个式子最后边的等号,即第1个式子:
a=a-(a+a)
计算结果为a=a,意思为将等号右边的a的值赋值给等号左边的a,因此第1个式子的计算结果为a的值不变,依然是a的原始值;
再计算第2个式子:
a=a+(第一个式子的计算结果)
代入第1个式子的计算结果,得到:
a=a+a
即a=2
第二个是 先用后加 先加后用
所以是3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6fe942b58
2013-03-11 · 超过13用户采纳过TA的回答
知道答主
回答量:52
采纳率:0%
帮助的人:25.5万
展开全部

结果:a=-2,b=4

a+=a-=a+a:根据C语言语法运算符优先级,先计算的是a+a结果为2,再计算a-=a+a,即:a=a-2,结果为-1,此时a的值也为-1,再计算a+=a,即:-1加-1结果为-2。

可按此理解:a+=[a-=(a+a)]

b=(a++)+(++a):a++结果为2,++a结果也为2,b的值为4。

附程序运行结果图:

看看C语言运算优先级就知道了……

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清疯卧月
2013-03-12
知道答主
回答量:25
采纳率:0%
帮助的人:8.3万
展开全部
1
a-=a+a;//a=-1;
a+=a;//a=-2;
2
b=4;//用括号括起来表示两个同时操作
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zzw820428
2013-03-11 · TA获得超过729个赞
知道小有建树答主
回答量:633
采纳率:0%
帮助的人:683万
展开全部
1. -2
2. 4
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
旺仔大气球
2013-03-11
知道答主
回答量:1
采纳率:0%
帮助的人:1514
展开全部
一个是自加 一个是赋值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式