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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘博 黑马帝   /  2011-12-27 12:46  /  2340 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘博 于 2011-12-27 17:20 编辑

在网上发现了一个小问题,让用最有效率的方法算出8乘以2等于几,说一般有c语言开发经历的人会这么问,这个题的正确答案是什么呢?很迷惑

评分

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

查看全部评分

7 个回复

倒序浏览
用左移移位符就可以了,8<<2,就等效于8*2,直接乘的话需要先将两个数都转成二进制进行运算,需要运算的位数较多,比较低效,移位的话只要将转成二进制的8的最后一位后面再加个零就可以了,所以运算速度很快。

评分

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

查看全部评分

回复 使用道具 举报
曾运 黑马帝 2011-12-27 13:34:30
藤椅
计算机中数据都是二进制0  和 1保存的,所以移位的算法效率是最高的 8*2等价于 8向左移动1位即是 8*(2^0)=16
如图示:

评分

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

查看全部评分

回复 使用道具 举报
8<<1就可以了,右移几位就等于乘以二的几次方,左移几位就是除以二的几次方,这是比较高效的

评分

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

查看全部评分

回复 使用道具 举报
也就是这一种解释:8*2需要将2个数先转换成二进制在运算。如果你用“移位符”直接表示用二进制运算。

评分

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

查看全部评分

回复 使用道具 举报
刘博 黑马帝 2011-12-27 17:18:27
地板
刘建宇 发表于 2011-12-27 15:39
8

谢谢小哥了,可是你是不是说反了呢?应该是左移是乘,右移是除吧?
回复 使用道具 举报
刘建宇 黑马帝 2011-12-29 14:33:39
7#
刘博 发表于 2011-12-27 17:18
谢谢小哥了,可是你是不是说反了呢?应该是左移是乘,右移是除吧?

对 呵呵
回复 使用道具 举报
付星 黑马帝 2011-12-29 17:36:44
8#
对于8*2,最有效的方法是8<<1,cpu是对位直接支持的,你可以把1看成2的1次方,所以说左移的乘法只对2的倍的数有用,不是2的倍数千万别用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马