Is there a direct way how to turn a negative number to positive using bitwise operations in Actionscript 3? I just think I've read somewhere that it is possible and faster than using Math.abs()
or multiplying by -1
. Or am I wrong and it was a dream after day long learning about bytes and bitwise operations?
What I saw was that bitwise NOT
almost does the trick:
// outputs: 449
trace( ~(-450) );
If anyone find this question and is interested - in 5 million iterations ~(x) + 1
is 50% faster than Math.abs(x)
.
You need to add one after taking the bitwise negation. This is a property of two's complement number system. It is not related to Actionscript (aside from the alleged performance difference).
So, (~(-450)+1)
gives 450
and (~(450)+1)
gives -450
.
As noted in comments, this answer is written in response to the question, to fix a minor issue in the question asker's experiment. This answer is not an endorsement of this technique for general software development use.
Use the rule that says
~(x) = (-x)-1
If two-complement is being used (usually the case), negation is complement then add 1:
-x == ~x + 1
Whether it's faster depends on what optimisations the compiler performs. When in doubt, test.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With