是否有直接方法如何使用ActionScript 3中的按位运算将负数转换为正数?我只是认为我读过某个地方,它比使用Math.abs()或乘以-1可能而且更快。还是我做错了,这是一个日复一日学习字节和按位运算的梦想?

我看到的是按位NOT几乎可以解决问题:

// outputs: 449
trace( ~(-450) );

如果有人发现这个问题并感兴趣,那么在500万次迭代中,~(x) + 1Math.abs(x)快50%。

最佳答案

在进行按位取反后,您需要添加一个。这是two's complement number system的属性。它与Actionscript无关(除了所谓的性能差异)。

因此,(~(-450)+1)给出了450(~(450)+1)给出-450

如评论中所述,此答案是针对该问题而写的,以解决问题提问者实验中的一个小问题。这个答案不代表该技术可用于一般的软件开发。

10-02 22:30