按位运算正数为负数

时间:2015-09-03 15:15:09

标签: javascript bit-manipulation bitwise-operators bit-shift

抛开性能和优化辩论。

我正在寻找一种方法在Javascript中取一个数字让它为5并使用按位运算将其更改为-5。

翻转位的问题是0变为1 ergo~5变为-6。

有没有办法纯粹通过按位运算来做到这一点?我认为重新加入1会否定我可能获得或未获得的微小改进。

3 个答案:

答案 0 :(得分:4)

作为整数的负数是two's complement。要使用两个补码翻转符号,您可以这样做:

  

“为了获得二进制数的二进制补码,这些位是   通过使用按位NOT运算反转或“翻转”;价值   然后将1加到结果值中,忽略溢出   当取两个补码0时发生。“

在JavaScript中:

n = ~n + 1;

如果您正在寻找性能,那么这可能不是最快的方式。这很可能是使用专门为此设计的运营商:

n = -n;

答案 1 :(得分:0)

它不是太快了。它没有任何意义。当你需要否定数字时,没有人能比你的CPU做得更好。 http://jsperf.com/minus-vs-not

答案 2 :(得分:0)

如果有人想知道如何在不使用 + 或 - 符号的情况下在负数和正数 (n) 之间来回切换...

n = ~n
add = 1
while add: 
     diff = add^n
     carry = (add&n)<<1
     add = carry
     n = diff
print(n)