首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript Tilde & Two's补码

Javascript Tilde & Two's补码
EN

Stack Overflow用户
提问于 2012-09-09 15:45:25
回答 6查看 14.9K关注 0票数 12

Two's complement method -生成-(x + 1)

例如,当JavaScript遇到波浪时,他使用以下方法:

代码语言:javascript
复制
~5 = -(5+1) = -6.

好的--让我们深入一点。

现在让我们来谈谈这两个函数的补码方法。

代码语言:javascript
复制
5        = 0000 0101
Flip     = 1111 1010
add one  = 1111 1011

所以1111 1011就是-5

怎么做到的?

再次:翻转:

代码语言:javascript
复制
0000 0100 

添加一个:

代码语言:javascript
复制
0000 0101

所以它就是-5

那么~5=-6是如何解决这个问题的呢?

这个-6是从哪里来的?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-09-09 15:53:39

首先,您需要认识到~是位翻转运算符,这与取反运算符-不同。~只执行按位翻转,但求反操作符-执行按位翻转并加1(用于整数)。

正如你已经解释过的,如果你想使用二进制补码方法从一个正数n转到-n,你可以逐位翻转/而不是n,然后加1。~n只是逐位翻转,而不是~n=-n-1

例如:

代码语言:javascript
复制
5               = 0000 0101
Flipped (~5)    = 1111 1010

那么,1111 1010代表哪个数字呢?因为第一个数字是1,我们知道它是一个负值。要查找哪个值,请执行以下操作

代码语言:javascript
复制
-(flip(1111 1010) + 1) =
-(0000 0101 + 1)
-(0000 0110) =
-6
票数 19
EN

Stack Overflow用户

发布于 2012-09-09 15:55:06

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

到目前一切尚好。然而,~不是二进制的补码,它是二元反转运算符。

代码语言:javascript
复制
5     = 0000 0101
flip  : 1111 1010

它是-6

这样说清楚了吗?

票数 8
EN

Stack Overflow用户

发布于 2012-09-09 16:00:36

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

对于正数n

代码语言:javascript
复制
~n + 1 = -n
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12337360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档