i=i++问题(C语言)

1 篇文章 0 订阅
(没学过汇编)
int i=0;
i=i++;
下面是汇编结果:
movl $0, 12(%esp) //定义个变量12并赋值(val:0)
movl 12(%esp), %eax//把12放到运算寄存器eax(val:0)
leal 1(%eax), %edx//把运算寄存器eax(val:0)+1然后放到结果寄存器edx(val:1)里
movl %edx, 12(%esp)//把结果寄存器edx(val:1) 赋值给变量12(val:0->1)
movl %eax, 12(%esp)//把运算寄存器eax(val:0)赋值给变量12(val:1->1)

我们试试别的
int i=0;
i++;//++i也是这个汇编结果
下面是汇编
movl $0, 12(%esp)//定义个变量12并赋值(val:0)
addl $1, 12(%esp)//直接使用运算寄存器将1加到变量12里(0-1)

我们再换换
int i=0;
int b=0;
b=i++;
下面是编译
movl $0, 12(%esp)//定义个变量12并赋值(val:0)
movl $0, 8(%esp)//定义个变量8并赋值(val:0)
movl 12(%esp), %eax//把12放到运算寄存器eax(val:0)
leal 1(%eax), %edx//把运算寄存器eax(val:0)+1然后放到结果寄存器edx(val:1)里
movl %edx, 12(%esp)//把结果寄存器edx(val:1) 赋值给变量12(val:0->1)
movl %eax, 8(%esp)//把运算寄存器eax(val:0)赋值给变量8(val:1->1)


总结:
其实i++或者++i,只有单句的话执行是add加法运算,如果i++有赋值动作的话类似于下列代码:
var result,temp;
int i=0;
temp=i;
result=temp+1;
i=result;
i=temp;//以上是i=i++;
简单说其实i=0;i=i++就是i=1然后i=0,其实i++这个i就已经变成了+1的结果了,但是呢加完后回写了没运算的值




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值