Javascript Tilde&Two的补充

Roy*_*mir 9 javascript bit-manipulation

二进制补码方法 - 生成-(x + 1).

例如,当JavaScript遇到Tilde时,他使用这种方法:

~5 = -(5+1) = -6.
Run Code Online (Sandbox Code Playgroud)

很好 - 让我们更深入.

现在让我们来谈谈Two's补充方法.

5        = 0000 0101
Flip     = 1111 1010
add one  = 1111 1011
Run Code Online (Sandbox Code Playgroud)

所以1111 1011-5.

怎么样 ?

再次:翻转:

0000 0100 
Run Code Online (Sandbox Code Playgroud)

添加一个:

0000 0101
Run Code Online (Sandbox Code Playgroud)

它就是这样-5.

那么这又如何解决 ~5=-6

-6是从哪里来的?

Ale*_*øld 16

首先,您需要意识到这~是按位翻转运算符,它与否定运算符不同-.~只执行按位翻转,但是否定运算符-按位翻转并添加一个(对于整数).

正如你所解释的那样,如果你想从一个正数n-n使用二补码方法,你按位翻转/不是n并加上1.~n只是按位而不是意味着~n=-n-1.

例如:

5               = 0000 0101
Flipped (~5)    = 1111 1010
Run Code Online (Sandbox Code Playgroud)

那么,哪个数字1111 1010代表什么?由于第一个数字是1,我们知道它是负值.要找到哪个值,请执行

-(flip(1111 1010) + 1) =
-(0000 0101 + 1)
-(0000 0110) =
-6
Run Code Online (Sandbox Code Playgroud)


And*_*tin 8

~5 = -(5 + 1) = -6

到现在为止还挺好.然而,~不是二者的补充,它是二元反演算子.

5     = 0000 0101
flip  : 1111 1010
Run Code Online (Sandbox Code Playgroud)

这是-6

那清楚了吗?