我曾尝试测试在Java中使用
这两种操作中哪一种应该更快,以及
谢谢!
编辑:这是我的测试程序。
var & 3
是否比var % 4
更快(也可以是& 2^n - 1与% 2^n),我制作了一个简单的程序来计算完成计算所需的平均时间,但是我得到了奇怪的结果,我无法得出结论。对于大约1000个计算,mod 4
需要更长的时间,但是当我尝试进行约1000000次计算时,两个平均值大致相同......我怀疑这是由于Java优化我的代码,但我不确定。这两种操作中哪一种应该更快,以及
%
如何实现?谢谢!
编辑:这是我的测试程序。
long startTime, time, sum;
int iterations = 1000;
int v;
sum = 0;
for(int i = 0; i < iterations; i++)
{
startTime = System.nanoTime();
v = i % 4;
time = System.nanoTime();
sum += time-startTime;
}
System.out.println("Mod 4 : "+(sum/iterations));
sum = 0;
for(int i = 0; i < iterations; i++)
{
startTime = System.nanoTime();
v = i & 3;
time = System.nanoTime();
sum += time-startTime;
}
System.out.println("& 3 : "+(sum/iterations));
进行100次迭代,使用mod 4
需要130纳秒,而使用& 3
需要25060纳秒。
进行1000次迭代,使用mod 4
需要1792纳秒,而使用& 3
只需要81纳秒。
进行1000000次迭代时,两者所需的时间大约都是50纳秒左右,但使用mod 4
总是比& 3
略长几个纳秒。
-Xint
,以查看是否是因为Java将其编译为本地代码在第二个示例中。 - regulusv
的赋值可能会被优化为无操作,因此您测量的只是System.nanoTime
。 - zch