是否有直接方法如何使用ActionScript 3中的按位运算将负数转换为正数?我只是认为我读过某个地方,它比使用Math.abs()
或乘以-1
可能而且更快。还是我做错了,这是一个日复一日学习字节和按位运算的梦想?
我看到的是按位NOT
几乎可以解决问题:
// outputs: 449
trace( ~(-450) );
如果有人发现这个问题并感兴趣,那么在500万次迭代中,
~(x) + 1
比Math.abs(x)
快50%。 最佳答案
在进行按位取反后,您需要添加一个。这是two's complement number system的属性。它与Actionscript无关(除了所谓的性能差异)。
因此,(~(-450)+1)
给出了450
和(~(450)+1)
给出-450
。
如评论中所述,此答案是针对该问题而写的,以解决问题提问者实验中的一个小问题。这个答案不代表该技术可用于一般的软件开发。