Javascript Tilde & Two's complement

Javascript Tilde & Two's complement

本文关键字:complement Two amp Javascript Tilde      更新时间:2023-09-26

Two的补码法 - 生成-(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

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

目前为止,一切都好。但是,~不是两者的补码,而是二进制反转运算符。

5     = 0000 0101
flip  : 1111 1010

即 -6

这说明清楚了吗?

~是按位 NOT 运算符(仅反转其操作数的位(。

对于正数n

~n + 1 = -n

二的补码法 - 生成-(x + 1) .

简单地说,二的补码不会产生-(x + 1)。一个人的补码确实如此(即 ~/按位 NOT/翻转位(。

二的赞美(翻转比特,加1(是我们用来用纯比特表示负数(并从中派生(的(-0反(操作/编码。二的x补将产生-x

~5无非是将位0000 0101翻转到1111 1010

为了确定1111 1010的值,我们翻回到0000 0101并添加 1:0000 0110 (-6)

tild(~( -

它只是flip(n(。 即 ~5 = flip(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

5 = 0000 0101

翻转 = 1111 1010

转换细分 1111 1010

0 x 2^0 = 0
1 x 2^1 = 2
0 x 2^2 = 0
1 x 2^3 = 8
1 x 2^4 = 16
1 x 2^5 = 32
1 x 2^6 = 64
- 1 x 2^7 = -128

所以 -128+64+32+16+8+0+2+0 = -6