关于
JAVA
在编程中,通过适当采用移位运算,可以缩短代码的执行时间,提高项目的执行效率。 这可以从一个问题开始:
问题:
答案:2 3
由此,我想,为什么位移运算比乘法运算要快呢? 其实,简单地说,计算机的内存
0
和
1
的二进制数据格式组成表示数据的东西,我认为乘法在内部也应该转换为位移运算。
用一个例子验证一下上面的正确性吧。
示例:
公共类演示2 {
publicstaticvoidmain (字符串[ ] args ) {
Demo2 d=new Demo2(;
d.method1(;
d.method2(;
}
公共语音方法1 () {
long start=System.nanoTime (;
int i=100;
int j=i*2;
System.out.println ('乘法加上: ) (system.nanotime )-start );
}
公共语音方法2 () {
long start=System.nanoTime (;
int i=100;
int j=i1;
System.out.println ('用于位移运算: ) (system.nanotime )-start );
}
}
输出:
乘法需要时间
:46114
(单位纳秒) )。
位移运算需要时间
:8016
(单位纳秒) )。
我简化了上面的代码:
公共类演示2 {
公共语音方法1 () {
int i=100;
int j=i*2;
}
公共语音方法2 () {
int i=100;
int j=i1;
}
}
e:(javac
Demo2.java
e:(javap
-verbose Demo2 Demo.txt
查询字节代码信息:
.
公共语音方法1 (;
代码:
堆栈=2,Locals=3,Args_size=1
0:bipush100
2:istore_1
3:iload_1
4:iconst_2
5:imul
6:istore_2
7:返回
线号表:
line 7: 0
8:3线
line 9: 7
公共语音方法2 (;
代码:
堆栈=2,Locals=3,Args_size=1
0:bipush100
2:istore_1
3:iload_1
4:iconst_1
5:ishl
6:istore_2
7:返回
线号表:
line 12: 0
line 13: 3
line 14: 7
}
从差异来看,位移运算
ishl
(将
资讯科技
将类型数值向左移动指定的位数,并将结果推入堆栈顶部)执行指令,并通过乘法调整是
国际货币基金组织
(把堆栈放在上面两个
资讯科技
将类型的数值相乘,然后将结果推入堆栈顶部)。
整数乘法或整数除法所需的时钟周期远大于移位操作所需的时钟周期,因此该指令的基本执行时间如下所示。
移位指令
寄存器移位
1
位元
时钟周期数为
2
整数乘法
国际货币基金组织
16
位寄存器乘法
时钟周期是
128 ~ 154
整数除法
IDIV
16
位寄存器
时钟周期是
165至184
进一步探究为什么,必须研究寄存器和电路图的知识
.
到达之前
.
参考资料:
0
顶
1
踩着我
共享到:
2012-07-09 14:25
参照4923
评论
二楼
富春
2014-01-15
这只是init的时间,如果在method2之前进行method1,则结果相反
一楼
颜武墅
2013-01-10
我不知道位移运算在做什么,所以本文很实用!