c语言的自增、自减运算问题

#include<stdio.h>intmain(){inta=6;intx=(++a)+(++a)+(++a);printf("%d\n",x);printf("%d\... #include<stdio.h>
int main()
{
int a = 6 ;
int x=( ++a ) + ( ++a ) + ( ++a ) ;
printf("%d\n",x) ;
printf("%d\n",a) ;
return 0;

}
我原本以为第一行输出的是24(7+8+9),可运行结果却是25,求解
展开
 我来答
aderan
2012-09-26
知道答主
回答量:1
采纳率:0%
帮助的人:1562
展开全部
movl $6, 24(%esp) ;将6加入esp 偏移 24位置
addl $1, 24(%esp)
addl $1, 24(%esp)
movl 24(%esp), %eax ;相当于先做一个和运算
addl %eax, %eax
addl $1, 24(%esp) ;再做另一个和
addl 24(%esp), %eax
movl %eax, 28(%esp)

GCC 下部分汇编代码.
正如上面朋友说的,这个和编译器的实现有关,”++“这种在一个语句中最好不要多用。
PS :不要本本,多学点底层。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蓦然prince
2012-09-26 · TA获得超过255个赞
知道小有建树答主
回答量:163
采纳率:0%
帮助的人:105万
展开全部
同学你好,你不用为这个问题纠结;你上面的推断是没有问题的,可是当=( ++a ) + ( ++a ) 前两一样时,( ++a ) + ( ++a ) = 16,不是15,你记住就可以了,这个问题只有在等号后面是相同的两个前自加后会出现这种问题,其他的情况和你理解的是相同的,这个事C中的一个错误吧,你记住就可以,不必在意,也不要轻易用这种方式表达
希望你能采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
冰呵冬眠的水
2012-09-26 · TA获得超过185个赞
知道答主
回答量:47
采纳率:0%
帮助的人:45.4万
展开全部
int x=( ++a ) + ( ++a ) + ( ++a ) ;
首先这是不规范的代码,根据+号运算符的右结合性 为(9+9+7)
这一点你肯定奇怪为什么不是(9+8+7),这是根据编译器的不同而决定的。因为不规范的语法,所以就不受约定。
好吧,我那时也深受这个问题的迫害!翻书、百度还和同学讨论。
这些问题你学编译原理才能明白的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-09-26
展开全部
我在VS2008上面是27,在eclipse上面是25。好像在不同的编译器上面会产生不同的结果,跟编译器有关。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huangluo0722
2012-09-26 · TA获得超过242个赞
知道小有建树答主
回答量:165
采纳率:0%
帮助的人:170万
展开全部
同学我的怎么是27呢 编译环境的问题吧,我是vs2008! 又用vc6.0测试是25。。。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式