社区
C++ 语言
帖子详情
1+10000和10000+1有区别嘛,如果有区别是什么?
yu3350360
2010-06-09 06:21:00
如题
...全文
770
65
打赏
收藏
1+10000和10000+1有区别嘛,如果有区别是什么?
如题
复制链接
扫一扫
分享
转发到动态
举报
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)
String中的+链接和StringBuilder中的append有什么
区别
?它们之间又有什么关系?
String中的+链接和StringBuilder中的append有什么
区别
?它们之间又有什么关系? 前言 我们知道在Java语言中,字符串的连接方式有很多种。其中最常用的则是String的+或者+=和...
Java中for循环的i++和++i
区别
我们应该都知道i++和++i的
区别
是: ++i是先执行 i = i +1 再使用 i 的值,而 i++ 是先使用 i 的值再执行 i = i + 1; for循环的执行顺序如下: for(a;b;c){ d; } 进入循环执行a;只是进入的时候执行 执行b; //...
for循环中 i++ 和 ++i
区别
for循环中 i++ 在处理时,i++实际为i = i+1,执行时先创建临时变量保存 i 值,然后再+1,而++i不需要的,没有这个过程,所以++i的性能高于i++;for循环中 i++由于要创建临时变量并保存i的值,所以需要占用内存,使用...
for循环中的i++和++i有什么
区别
最近看一些别人的源码,发现很多人使用for循环都会这么写: for(int i=0; i<...赶紧到网上查了下,2种写法的运行时间是有差别,因为“Java中i++语句是需要一个临时变量取存储返回自增前的...
光纤收发器tx和rx是什么意思?二者有什么
区别
?
现如今,在视频监控工程的高清视频图像传输中,一般都会使用光纤...二者有什么
区别
?接下来就由飞畅科技的小编来为大家详细介绍下吧! 光纤收发器tx和rx的含义和
区别
: 光纤收发器中,tx是表示发送(transport),rx是
C++ 语言
65,184
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章