计算问题。
#include<stdio.h>voidmain(){inti=2,s=0;提交问题s=(++i)+(++i)+(++i);printf("s=%d\n",s);}电脑...
#include <stdio.h>
void main()
{
int i=2,s=0;提交问题
s=(++i)+(++i)+(++i);
printf("s=%d\n",s);
}
电脑的运行结果是13,为什么啊?算出来不应该是12么?
求大神! 展开
void main()
{
int i=2,s=0;提交问题
s=(++i)+(++i)+(++i);
printf("s=%d\n",s);
}
电脑的运行结果是13,为什么啊?算出来不应该是12么?
求大神! 展开
深美林评估
2024-12-24 广告
2024-12-24 广告
"收益法是运用适当的资本化率,将预期的估价对象房地产未来各期的正常纯收益折算到价值时点上的现值,求其之和来确定估价对象房地产价格的一种估价方法。深美林房地产土地资产评估公司,一级资质评估机构,十多年品牌,专业评估师,资深团队,现场勘查,精准...
点击进入详情页
本回答由深美林评估提供
展开全部
gcc 4.7.2 下反汇编有:
void main()
{
804841c: 55 push %ebp
804841d: 89 e5 mov %esp,%ebp
804841f: 83 e4 f0 and $0xfffffff0,%esp
8048422: 83 ec 20 sub $0x20,%esp
int i=2,s=0;
8048425: c7 44 24 1c 02 00 00 movl $0x2,0x1c(%esp)
804842c: 00
804842d: c7 44 24 18 00 00 00 movl $0x0,0x18(%esp)
8048434: 00
s=(++i)+(++i)+(++i);
8048435: 83 44 24 1c 01 addl $0x1,0x1c(%esp)
804843a: 83 44 24 1c 01 addl $0x1,0x1c(%esp)
804843f: 8b 44 24 1c mov 0x1c(%esp),%eax
8048443: 8d 14 00 lea (%eax,%eax,1),%edx
8048446: 83 44 24 1c 01 addl $0x1,0x1c(%esp)
804844b: 8b 44 24 1c mov 0x1c(%esp),%eax
804844f: 01 d0 add %edx,%eax
8048451: 89 44 24 18 mov %eax,0x18(%esp)
printf("s=%d\n",s);
8048455: 8b 44 24 18 mov 0x18(%esp),%eax
8048459: 89 44 24 04 mov %eax,0x4(%esp)
804845d: c7 04 24 00 85 04 08 movl $0x8048500,(%esp)
8048464: e8 97 fe ff ff call 8048300 <printf@plt>
可以看到实际的计算过程是:
s = (++i) + (++i) + (++i ) = a + b + c
先展开 ++i 得, b = c = i = 4, 所以 s = (++i) + 2*4
再计算 s = 4+1+8 = 13
不同的编译器可能有不同的结果,写代码时应该尽量避免这种依赖编译器实现的写法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询