抛开性能和优化辩论。
我正在寻找一种方法在Javascript中取一个数字让它为5并使用按位运算将其更改为-5。
翻转位的问题是0变为1 ergo~5变为-6。
有没有办法纯粹通过按位运算来做到这一点?我认为重新加入1会否定我可能获得或未获得的微小改进。
答案 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)