A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Hello_world_ 中级黑马   /  2013-7-29 07:10  /  1384 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-29 17:46 编辑

编写代码,用最有效率的方法计算出2乘以8等于几?
一道考试题!网上有很多说法,但是感觉没啥关系啊,直接输出多快啊!

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

8 个回复

倒序浏览
采用二进制移位的方式运算效率最高,毕向东老师的视频里有教学。
其实2*8也就是二进制表示下的2左移3位。
毕老师教学视频里第二天的为运算符(左移右移)里有详细解释,你可以看看。
回复 使用道具 举报
2<<3,
把8看作2的3次方,int x = 2*2的3次;  x=2<<3; 位运算的方式做运算是最快的。

我来说一下为什么? 其实我也是在网上查了下资料,觉得解释还行就搬运过来了。
位移运算调的是 ishl  (将 int 型数值左移位指定位数并将结果压入栈顶)指令,乘法运算调的是   imul (将栈顶两 int 型数值相乘并将结果压入栈顶)指令。
整数乘法或整数除法所需要的时钟周期远远大于移位操作所需的时钟周期,下面列出这个指令的基本执行时间:
移位指令               寄存器移 1 位         时钟周期数为 2  
整数乘法 IMUL        16 位寄存器乘         时钟周期为 128 ~ 154
整数除法 IDIV        16 位寄存器            时钟周期为 165 ~ 184

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
也就是你知道是8了  然后换成汇编指令  让2编程8啊  何苦不直接输出个8。掩耳盗铃之嫌,何苦了!
回复 使用道具 举报
breaveheart 发表于 2013-7-29 07:59
采用二进制移位的方式运算效率最高,毕向东老师的视频里有教学。
其实2*8也就是二进制表示下的2左移3位。
...

这个我看过,就是心理觉得没必要!直接输出8和你这样生搬硬套成8不是一个道理么 !你心里都知道是8
回复 使用道具 举报
把8看作2的3次方(还是人脑计算),int x = 2*2的3次;  x=2<<3; 位运算的方式做运算是最快的。
回复 使用道具 举报
计算机都是二进制计算的,就算你直接写代码是写成2*8,计算机也要把他们转换成二进制,这样是不是效率下降了啊。如果你直接用二进制操作的话是不是效率就高了。而位运算是对数的二进制操作的。所以用2<<3是效率最高的操作。2 的二进制表现形式为0000-0000 0000-0000 0000-0000 0000-0010,左移三位后为0-0000 0000-0000 0000-0000 0000-0010000
回复 使用道具 举报
王广亚 发表于 2013-7-29 09:15
计算机都是二进制计算的,就算你直接写代码是写成2*8,计算机也要把他们转换成二进制,这样是不是效率下降 ...

有点感觉了!
回复 使用道具 举报
用移位运算是计算机执行最快的,直接对二进制操作,...2<<3就可以了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马