1+10000和10000+1有区别嘛,如果有区别是什么?

yu3350360 2010-06-09 06:21:00
如题
...全文
770 65 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
65 条回复
切换为时间正序
请发表友善的回复…
发表回复
shihunjiangjie 2010-06-12
  • 打赏
  • 举报
回复
牛人再现[Quote=引用 35 楼 jekhn 的回复:]
引用 30 楼 icansaymyabc 的回复:

哈哈,这是出题者的自作聪明。

直接怀疑出题者想考的是这个知识点:
a=1;
a=a+10000;
经过优化后会编译成 ADD 指令

a=10000;
a=a+1;
经过优化后会编译成 INC 指令

在8086时代的破CPU上,INC 指令比 ADD 指令快1倍;可是到了386时代,这两条指令的执行时间已经没有差……
[/Quote]
yu3350360 2010-06-11
  • 打赏
  • 举报
回复
还是结贴吧,貌似讨论也没什么意义了
yu3350360 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 58 楼 softman11 的回复:]
引用 33 楼 lei35151 的回复:
28: int m = 1000 + 1 ;
00401688 mov dword ptr [ebp-4],3E9h
29: int n = 1 + 1000 ;
0040168F mov dword ptr [ebp-8],3E9h

反汇编出来的信息,哪位高手能够解释一下


就是完全一样的嘛。
1+1000
还是1000+1
……
[/Quote]
也没搞出题目的意图来
哈哈,学习了呀。。
softman11 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 lei35151 的回复:]
28: int m = 1000 + 1 ;
00401688 mov dword ptr [ebp-4],3E9h
29: int n = 1 + 1000 ;
0040168F mov dword ptr [ebp-8],3E9h

反汇编出来的信息,哪位高手能够解释一下
[/Quote]

就是完全一样的嘛。
1+1000
还是1000+1
编译器最后都是给你搞成1001的,也就是3E9H

两条指令只是目标单元地址不同,都是一个MOV指令周期的时间。
没有任何区别。
softman11 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 54 楼 visualeleven 的回复:]
引用 30 楼 icansaymyabc 的回复:
哈哈,这是出题者的自作聪明。

直接怀疑出题者想考的是这个知识点:
a=1;
a=a+10000;
经过优化后会编译成 ADD 指令

a=10000;
a=a+1;
经过优化后会编译成 INC 指令

在8086时代的破CPU上,INC 指令比 ADD 指令快1倍;可是到了386时代,这两条指令的执行时间已经没有差别了……
[/Quote]

是的,如果是变量的话确实是如此。

但是如果是常量的话,编译器肯定是直接给你搞成10001了。

我觉得这个出题的人绝对是个半罐水。

赵4老师 2010-06-10
  • 打赏
  • 举报
回复
1+10000 means big gain
先挣1元后挣10000元意味着大有收获
10000+1 means I don't care
先挣10000元后挣1元意味着我不在乎
softman11 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 wuweiyin 的回复:]
一般的编译环境应该都是从右向左进行的.
计算机运算过程如下:
取值到寄存器->取第二个值到寄存器并与第一个值进行位运算->给出结果

所以我觉得就是寄存器中位运算效率的差异.
10000+1//寄存器中存的是1,再将10000加上,每一个位都要计算到.
1+10000//寄存器中存的是10000,再将1加上,可能只要计算最后一个位即可.效率较高
[/Quote]

这个解释不通。
都是二进制,怎么可能位数不同。
1在寄存器里面如果8位的话,也是00000001啊。
一样是八位。
加法器计算的时候可都是两个输入数直接翻转的,不会还会去判断你有几个0,几个1。
Eleven 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 icansaymyabc 的回复:]
哈哈,这是出题者的自作聪明。

直接怀疑出题者想考的是这个知识点:
a=1;
a=a+10000;
经过优化后会编译成 ADD 指令

a=10000;
a=a+1;
经过优化后会编译成 INC 指令

在8086时代的破CPU上,INC 指令比 ADD 指令快1倍;可是到了386时代,这两条指令的执行时间已经没有差别了。

可见这个出题者不仅自作聪明,还愚昧、……
[/Quote]
NX
ffllaagg 2010-06-10
  • 打赏
  • 举报
回复
有点想不明白、
comrdliyang 2010-06-10
  • 打赏
  • 举报
回复
不懂!!!
Yizhoujimoqitian 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 icansaymyabc 的回复:]
哈哈,这是出题者的自作聪明。

直接怀疑出题者想考的是这个知识点:
a=1;
a=a+10000;
经过优化后会编译成 ADD 指令

a=10000;
a=a+1;
经过优化后会编译成 INC 指令

在8086时代的破CPU上,INC 指令比 ADD 指令快1倍;可是到了386时代,这两条指令的执行时间已经没有差别了。

可见这个出题者不仅自作聪明,还愚昧、……
[/Quote]

NB啊............
dream17953 2010-06-10
  • 打赏
  • 举报
回复
不明白,可能在串行加法器中有区别。
董小尾 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 icansaymyabc 的回复:]
哈哈,这是出题者的自作聪明。

直接怀疑出题者想考的是这个知识点:
a=1;
a=a+10000;
经过优化后会编译成 ADD 指令

a=10000;
a=a+1;
经过优化后会编译成 INC 指令

在8086时代的破CPU上,INC 指令比 ADD 指令快1倍;可是到了386时代,这两条指令的执行时间已经没有差别了。

可见这个出题者不仅自作聪明,还愚昧、……
[/Quote]

--!~ 高手
cymlife 2010-06-10
  • 打赏
  • 举报
回复
问君能有几多愁,恰似一江春水向东流
Xiaoloveliuforever 2010-06-10
  • 打赏
  • 举报
回复
记得以前看到有位“砖家”分析邮箱地位为什么都是
XXXXXXX @ XXX.XXX 也就是为什么要用@
分析了好大一篇
结果后来采访邮件的创始人
他说:“就觉得@这个符号看着顺眼。”
铁匠梁 2010-06-10
  • 打赏
  • 举报
回复
结果一样,重要的结果。
saiweng198 2010-06-10
  • 打赏
  • 举报
回复
本来1块钱工资,10000块钱奖金
本来10000块钱工资,1块钱奖金
那个爽??????
崇山峻岭_ 2010-06-10
  • 打赏
  • 举报
回复
有区别吗?

void main( void )
{
int a = 0;
a = 10000 + 1;
a = 1 + 10000;
}


17: void main( void )
18: {
00401800 push ebp
00401801 mov ebp,esp
00401803 sub esp,44h
00401806 push ebx
00401807 push esi
00401808 push edi
00401809 lea edi,[ebp-44h]
0040180C mov ecx,11h
00401811 mov eax,0CCCCCCCCh
00401816 rep stos dword ptr [edi]
19: int a = 0;
00401818 mov dword ptr [ebp-4],0
20: a = 10000 + 1;
0040181F mov dword ptr [ebp-4],2711h
21: a = 1 + 10000;
00401826 mov dword ptr [ebp-4],2711h
22: }
x396448534 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 58 楼 softman11 的回复:]
引用 33 楼 lei35151 的回复:
28: int m = 1000 + 1 ;
00401688 mov dword ptr [ebp-4],3E9h
29: int n = 1 + 1000 ;
0040168F mov dword ptr [ebp-8],3E9h

反汇编出来的信息,哪位高手能够解释一下


就是完全一样的嘛。
1+1000
还是1000+1
……
[/Quote]

NX
kkmqj 2010-06-10
  • 打赏
  • 举报
回复
58楼正解。
加载更多回复(43)

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧