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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 思绪 中级黑马   /  2014-3-21 09:48  /  1449 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


/*
需求:编程计算3乘8等于几,什么方法效率更高?
*/
        public static void main(String[] args)
        {
                int m;
                        m=3<<3;
                System.out.println(m);
        }
8是2的3次幂,3*8运用3二进制往左移3位后直接得到3*8的结果,为什么这种效率要比3*8要高?是因为计算机底层运算是2进制的运算吗?

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

5 个回复

倒序浏览
位运算是所有运算里最快的,故移位比乘法有效率,所以如2*8的话,2<<3是最有效率的,只需要1个指令周期;而2*8的话用到mul指令,需要耗费很多的指令周期。

评分

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

查看全部评分

回复 使用道具 举报
  1. class Demo
  2. {
  3.   public static void main(String[] args)
  4.      {
  5.         inta;
  6.         a=3<<3;
  7.         System.out.println(a);
  8.       }
  9. }
  10. 因为计算机的底层运算就是二进制的运算
  11. 3*8=3<<3

  12. 3的二进制是:00000000 00000000 00000000 00000011
  13. 3左移3位              00000000 00000000 00000000 00011000=24
复制代码


评分

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

查看全部评分

回复 使用道具 举报
在计算机中计算机只能做加法运算,对于乘法来说它的步骤:
a、获得十进制被乘数3和乘数8
b、将被乘数和乘数转换成二进制
c、将被乘数循环左移位,乘数逆序展开对应各次移位
d、排除乘数中为0的位对应的移位
e、将所有不为0的位对应的移位相加即可得到最后结果
f、将最后结果转换回10进制数

上面的过程比较繁琐,而对于乘数8来说是一个特殊的数字,因为对于被乘数3转换为二进制后往右边移位一次相当于乘以2,
所以对于3乘8,只需要将被乘数3转换为二进制后往右边移位3次就相当于乘8,所以移位运算更高效。       

评分

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

查看全部评分

回复 使用道具 举报
位运算效率就是高
回复 使用道具 举报
syw02014 发表于 2014-3-21 10:56
在计算机中计算机只能做加法运算,对于乘法来说它的步骤:
a、获得十进制被乘数3和乘数8
b、将被乘数和乘 ...

往左移。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马