按位运算有助于提高性能吗?

Geo*_*ith 1 air flash actionscript-3

我意识到理论上的逐位移位比AS3中的乘法和除法更快(我也对编译为AIR时的答案感兴趣).

例如:a << 3vsa * 8

不过我警惕编译后这可能不是这样,我不知道闪光究竟如何编译AS3,但我有一种感觉,他们会掉在可能的表现为他们的按位等价物.

是否有任何证据表明编译后按位操作更快?

Tim*_*dik 7

我做了一些测试.

测试1:

var t:Number = getTimer();
for (var i:Number=0; i<30000000; i++) {
    var a:uint = Math.round(Math.random()*100);
    a *= 8;
}
var t1:Number = getTimer()-t;
trace(t1);
Run Code Online (Sandbox Code Playgroud)

输出:

[trace] 8999
Run Code Online (Sandbox Code Playgroud)

测试2:

var t : Number = getTimer();
for (var i:Number=0; i<30000000; i++) {
    var a:uint = Math.round(Math.random()*100);
    a <<= 3;
}
var t1:Number = getTimer()-t;
trace(t1);
Run Code Online (Sandbox Code Playgroud)

输出:

[trace] 8987
Run Code Online (Sandbox Code Playgroud)

TEST3:

var t:Number = getTimer();
for (var i:Number=0; i<30000000; i++) {
    var a:uint = Math.round(Math.random()*100);
    a *= 13;
}
var t1:Number = getTimer()-t;
trace(t1);
Run Code Online (Sandbox Code Playgroud)

输出:

[trace] 8918
Run Code Online (Sandbox Code Playgroud)

所以,如你所见,你不必担心这些事情,编译器会为你做这件事.

  • 虽然我当然同意这永远不会成为一个问题,但是你的测试是偏斜的,因为它做的事情比你在循环的每次迭代中测试的事情要长几个数量级.这意味着使用按位的任何好处都可能隐藏在其他操作的噪声背后. (2认同)