黑马程序员技术交流社区

标题: 关于3*8----3<<3运行效率的问题(新人) [打印本页]

作者: 思绪    时间: 2014-3-21 09:48
标题: 关于3*8----3<<3运行效率的问题(新人)

/*
需求:编程计算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进制的运算吗?


作者: 刘先斌    时间: 2014-3-21 10:05
位运算是所有运算里最快的,故移位比乘法有效率,所以如2*8的话,2<<3是最有效率的,只需要1个指令周期;而2*8的话用到mul指令,需要耗费很多的指令周期。
作者: 蓝枫    时间: 2014-3-21 10:51
  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
复制代码



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

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

作者: leon_hm    时间: 2014-3-21 11:16
位运算效率就是高
作者: 75100313    时间: 2014-3-21 21:16
syw02014 发表于 2014-3-21 10:56
在计算机中计算机只能做加法运算,对于乘法来说它的步骤:
a、获得十进制被乘数3和乘数8
b、将被乘数和乘 ...

往左移。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2