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是从哪里来的?
发布于 2012-09-09 15:53:39
首先,您需要认识到~是位翻转运算符,这与取反运算符-不同。~只执行按位翻转,但求反操作符-执行按位翻转并加1(用于整数)。
正如你已经解释过的,如果你想使用二进制补码方法从一个正数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发布于 2012-09-09 15:55:06
~5 = -(5 + 1) = -6
到目前一切尚好。然而,~不是二进制的补码,它是二元反转运算符。
5 = 0000 0101
flip : 1111 1010它是-6
这样说清楚了吗?
发布于 2012-09-09 16:00:36
~是按位NOT运算符(仅对其操作数的位进行反转)。
对于正数n,
~n + 1 = -nhttps://stackoverflow.com/questions/12337360
复制相似问题