Two's complement method - 生成 -(x + 1)
。
例如,当 JavaScript 遇到波浪号时,他使用这种方法:
~5 = -(5+1) = -6.
好 - 让我们更深入。
现在让我们谈谈二进制补码方法。
5 = 0000 0101
Flip = 1111 1010
add one = 1111 1011
所以 1111 1011
是 -5
。
如何?
再次:翻转:
0000 0100
加一个:
0000 0101
所以它是 -5
。
那么 ~5=-6
如何解决?
这个 -6
来自哪里?
最佳答案
首先你要明白~
是按位翻转运算符,它和取反运算符-
是不一样的。 ~
只进行按位翻转,但取反运算符 -
进行按位翻转并加一(对于整数)。
正如您所解释的,如果您想使用双补法从正数 n
到 -n
,您可以按位翻转/非 n 并加 1 . ~n 只是按位表示 ~n=-n-1
。
例如:
5 = 0000 0101
Flipped (~5) = 1111 1010
那么,1111 1010
代表哪个数字呢?由于第一个数字是 1,我们知道它是一个负值。要找到哪个值,请执行
-(flip(1111 1010) + 1) =
-(0000 0101 + 1)
-(0000 0110) =
-6
关于Javascript波浪号和二的补码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12337360/