Two's complement method - 生成-(x + 1)
。
例如,当JavaScript遇到Tilde时,他使用此方法:
~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
来自何处?
答案 0 :(得分:14)
首先,您需要意识到~
是按位翻转运算符,它与否定运算符-
不同。 ~
只执行按位翻转,但是否定运算符-
按位翻转并添加一个(对于整数)。
正如你所解释的那样,如果你想使用二补码方法从正数n
转到-n
,你按位翻转/不是n并添加1.~n只是位-wise不代表~n=-n-1
。
例如:
5 = 0000 0101
Flipped (~5) = 1111 1010
那么,1111 1010
代表哪个数字?由于第一个数字是1,我们知道它是负值。要找到哪个值,请执行
-(flip(1111 1010) + 1) =
-(0000 0101 + 1)
-(0000 0110) =
-6
答案 1 :(得分:8)
~5 = -(5 + 1) = -6
~
不是二进制补码,而是二元求逆运算符。
5 = 0000 0101
flip : 1111 1010
是-6
这是否清楚了?
答案 2 :(得分:3)
~
是Bitwise NOT运算符(仅反转其操作数的位)。
对于正数n
,
~n + 1 = -n
答案 3 :(得分:2)
Two's complement method - 生成
-(x + 1)
。
简单地说,两个补码不会生成-(x + 1)
。一个补码就是(即〜/按位NOT /翻转位)。
两个赞美(翻转位,加1)是我们用来表示纯位中的负数(并从中导出)的(-0
averse)运算/编码。 x
的两个补码将生成-x
。
~5
只不过是将0000 0101
转换为1111 1010
。
要确定1111 1010
的值,我们会回到0000 0101
并添加1:0000 0110 (-6)
。
答案 4 :(得分:0)
Tild(〜) -
它只是翻转(n)。即~5 =翻转(5)。在java脚本中,数字始终是64位签名。让我们以8位为参考,
5==> 0000 0101
~5 ==> filp(0000 0101)
~5 ==> 1111 1010 ==> -6
2'补充 -
这是filp(n)+ 1。
5 ==> 0000 0101
2's complement of 5 ==> flip(0000 0101) + 0000 0001
2's complement of 5 ==> 1111 1010 + 000 0001
2's complement of 5 ==> 1111 1011