黑马程序员技术交流社区
标题:
关于移位运算符的运行效率问题
[打印本页]
作者:
陈坚
时间:
2012-4-13 18:57
标题:
关于移位运算符的运行效率问题
int a=4;
int j=a<<1;//左移一位就相当于乘以2,
int k=a>>1;//又移一位相当于除以2
int j1=a*2;
int k1=a/2;
System.out.println("j="+j+","+"k="+k);//j得到的结果是8,k的结果是2
System.out.println("j1="+j1+","+"k1="+k1);//j1得到的结果是8,k1的结果是2
移位的左移和右移能够达到乘和除的功能,同*和/符号能够达到同等的结果,试问一下移位运算的运算速度是不是比乘除的速度快和效率高呢?
作者:
石好强
时间:
2012-4-13 19:04
这个可以这样认为,移位操作的效率是比普通乘除更高。
因为移位操作进行的是底层的位操作,只需简单的移位就能完成,而乘除方法则需要进行一些运算。
如果反出汇编来,则能看到肯定是移位更加快。因为汇编中也是有位操作的,一步完成。而乘除方法则需要进行一些运算。
作者:
chenwei
时间:
2012-4-13 20:57
可以这样认为,因为位移运算符直接操作2进制的数,计算机底层都是用2进制存储的,所以操作快点
作者:
孙国军
时间:
2012-4-13 22:48
可以这样认为,楼上几位说的都没有错
但是位运算有它的局限性,他只能进行2的倍数的运算
作者:
蒋亮
时间:
2012-4-13 23:15
移位运算比乘除速度快、效率高,那是因为计算机CPU直接支持移位运算,但是正如楼上兄弟所说的,有它的局限性
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2