黑马程序员技术交流社区
标题:
关于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
class Demo
{
public static void main(String[] args)
{
inta;
a=3<<3;
System.out.println(a);
}
}
因为计算机的底层运算就是二进制的运算
3*8=3<<3
3的二进制是:00000000 00000000 00000000 00000011
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