我可以在Actionscript 3中使用按位操作将负数转为正数吗?

Rih*_*rds 7 actionscript-3 bitwise-operators

有没有直接的方法如何使用Actionscript 3中的按位运算将负数转为正数?我只是觉得我已经读过某个地方,它可能比使用Math.abs()或乘以更快-1.或者我错了,经过一天的学习字节和按位操作后,这是一个梦想?

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

// outputs: 449
trace( ~(-450) );
Run Code Online (Sandbox Code Playgroud)

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

rwo*_*ong 15

在按位否定后需要添加一个.这是两个补数系统的属性.它与Actionscript无关(除了所谓的性能差异).

所以,(~(-450)+1)给予450
(~(450)+1)给予-450.

正如评论中所指出的,这个答案是针对这个问题而写的,用以解决提问者实验中的一个小问题.这个答案并不是对这种通用软件开发使用技术的认可.

  • 不过请注意,系统上的最小整数不能像这样正值,+ 1会导致整数溢出。 (2认同)

Ray*_*oal 9

使用说明的规则

~(x) = (-x)-1
Run Code Online (Sandbox Code Playgroud)


MRA*_*RAB 5

如果使用了两个补码(通常是这种情况),否定就是补码,然后加 1:

-x == ~x + 1
Run Code Online (Sandbox Code Playgroud)

它是否更快取决于编译器执行的优化。如有疑问,请进行测试。