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,求解 展开
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,求解 展开
6个回答
展开全部
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 :不要本本,多学点底层。
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 :不要本本,多学点底层。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
同学你好,你不用为这个问题纠结;你上面的推断是没有问题的,可是当=( ++a ) + ( ++a ) 前两一样时,( ++a ) + ( ++a ) = 16,不是15,你记住就可以了,这个问题只有在等号后面是相同的两个前自加后会出现这种问题,其他的情况和你理解的是相同的,这个事C中的一个错误吧,你记住就可以,不必在意,也不要轻易用这种方式表达
希望你能采纳
希望你能采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int x=( ++a ) + ( ++a ) + ( ++a ) ;
首先这是不规范的代码,根据+号运算符的右结合性 为(9+9+7)
这一点你肯定奇怪为什么不是(9+8+7),这是根据编译器的不同而决定的。因为不规范的语法,所以就不受约定。
好吧,我那时也深受这个问题的迫害!翻书、百度还和同学讨论。
这些问题你学编译原理才能明白的。
首先这是不规范的代码,根据+号运算符的右结合性 为(9+9+7)
这一点你肯定奇怪为什么不是(9+8+7),这是根据编译器的不同而决定的。因为不规范的语法,所以就不受约定。
好吧,我那时也深受这个问题的迫害!翻书、百度还和同学讨论。
这些问题你学编译原理才能明白的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-09-26
展开全部
我在VS2008上面是27,在eclipse上面是25。好像在不同的编译器上面会产生不同的结果,跟编译器有关。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
同学我的怎么是27呢 编译环境的问题吧,我是vs2008! 又用vc6.0测试是25。。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询