用最有效率的方法算出2乘以8等於几? 为什么是2 < < 3 ?

windylcx 2009-06-24 12:57:30
如题~~是在一个贴子上看到的~~难道跟机器指令有关~
...全文
785 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
youjianbo_han_87 2009-06-25
  • 打赏
  • 举报
回复
因为转换成机器码运行时,都是做移位操作,所以 移位最快
zhouzongjiu 2009-06-24
  • 打赏
  • 举报
回复
2<<3
2是10
移三位是10000(十进制的16)
免去计算步骤所以快
wu_jia_08 2009-06-24
  • 打赏
  • 举报
回复
我们写的乘法和除法在底层就是移位运算实现的。
而java语言本身支持移位运算,所以运算速度当然快。
dinghun8leech 2009-06-24
  • 打赏
  • 举报
回复
二进制码的位置转换
2 < < 3等于2乘以2的三次方,就是位移运算
楼主知道有这个东西即可,不一定常用,欲知详情请翻阅java基础类的书籍,大多都能找到答案,表述2的二进制字符串的那几位这样一移动,就正好成了表述16的二进制字符串(怎么个移法我也忘了)
HinanaiTenshi 2009-06-24
  • 打赏
  • 举报
回复
这是没道理的,计算2*8最快的办法是在算法上优化为int re=16;
简单运算人为优化结果....
qsrock 2009-06-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jastby 的回复:]
2 < <3表示把二进制的2左移3为,即2*2^3(2乘以2的三次方)=16

http://www.blogjava.net/Unmi/archive/2006/06/18/124098.html
[/Quote]
就是因为系统对2进制的操作是最直接的,所以最快!
yhjhoo 2009-06-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 steedhorse 的回复:]
二进制左移三位不就是乘以8么。在处理器上,这比调用乘法器来算会快一点。当然,只能限于跟2的整数次幂相乘。
[/Quote]

支持
lxl308288406 2009-06-24
  • 打赏
  • 举报
回复
楼主貌似不懂汇编吧,<<是移位指令,二进制范畴,相当于编译好后的程序,机器直接执行效率当然要高
晨星 2009-06-24
  • 打赏
  • 举报
回复
二进制左移三位不就是乘以8么。在处理器上,这比调用乘法器来算会快一点。当然,只能限于跟2的整数次幂相乘。
xnjnmn 2009-06-24
  • 打赏
  • 举报
回复
移位运算符快些这是肯定的
0101010。。。。的换
算术运算符号就是屏蔽这些细节的方便使用
myairland 2009-06-24
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 windylcx 的回复:]
引用 8 楼 lxl308288406 的回复:
楼主貌似不懂汇编吧, < <是移位指令,二进制范畴,相当于编译好后的程序,机器直接执行效率当然要高

我知道移位指令。。只是不知道乘法为什么比移位慢~~现在明白了
[/Quote]
移位指令 SHR OPR , CNT,操作一个寄存器就行了
如果是乘法指令,虽然写话也是一个指令,但要把乘数,被乘数,积放在相应的寄存器里,而且做乘法运算还要调用很多子程序,计算机不会做乘法,它要把乘法解释成若干个移位指令和反转指令,又是一部分开销,所以慢

  • 打赏
  • 举报
回复
2 乘以 8,为什么不直接使用 2 * 8 呢?

写成 2 << 3 天知道这是在写 2 乘以 8。

而且把 2 乘以 8 写成 2 << 3 没有丝毫的必要,编译器、CPU 都会进行优化的根本不许手工去处理,而且处理了也是白处理,没有任何快的迹象。
Monkey_D_Luffy 2009-06-24
  • 打赏
  • 举报
回复
< <就是移位运算符
mianfeidog 2009-06-24
  • 打赏
  • 举报
回复
楼上,8 < <2结果变成32了。
小霍夫 2009-06-24
  • 打赏
  • 举报
回复
路过学习..
APOLLO_TS 2009-06-24
  • 打赏
  • 举报
回复
8<<2 这不更快??
yuxinglian 2009-06-24
  • 打赏
  • 举报
回复
左移n,就是乘n次2, 2<<3, 就是 2*2*2*2
右移反之
APOLLO_TS 2009-06-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mianfeidog 的回复:]
楼上,8 < <2结果变成32了。
[/Quote]
是错了!!1 位就行!!
windylcx 2009-06-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lxl308288406 的回复:]
楼主貌似不懂汇编吧, < <是移位指令,二进制范畴,相当于编译好后的程序,机器直接执行效率当然要高
[/Quote]
我知道移位指令。。只是不知道乘法为什么比移位慢~~现在明白了
jastby 2009-06-24
  • 打赏
  • 举报
回复
2 < <3表示把二进制的2左移3为,即2*2^3(2乘以2的三次方)=16

http://www.blogjava.net/Unmi/archive/2006/06/18/124098.html

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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