位运算符(〜)如何工作?

为什么〜2是-3?


请记住负数存储为正数的二进制补码 。 作为一个例子,下面是用二进制补码表示-2:(8位)

1111 1110

你得到这个的方式是通过一个数字的二进制表示,取其补数(反转所有位)并加一个。 两个从0000 0010开始,通过反转我们得到的位1111 1101.添加一个得到我们上面的结果。 第一位是符号位,暗示负面。

那么让我们来看看我们如何得到〜2 = -3:

再来两个:

0000 0010

简单地翻转所有的位,我们得到:

1111 1101

那么,二进制补码中的-3是什么? 从正值3:0000 0011开始,将所有位全部翻转到1111 1100,并添加一个变为负值(-3),1111 1101。

所以,如果你简单地反转2中的位,就会得到-3的二进制补码表示。

补码操作符(〜)只是FLIPS位。 由机器来解释这些位。


~翻转值中的位。

为什么~2-3与数字如何按位表示有关。 数字表示为二进制补码。

所以,2是二进制值

00000010

并且〜2翻转位,所以现在的值是:

11111101

其中,-3是二进制表示。


正如其他人提到的~只是翻转位(将一个零变为零),并且由于使用了二进制补码,您可以看到您看到的结果。

有一点需要补充的是,为什么使用二进制补码,这是因为负数运算与正数运算相同。 把-3看作是为了得到零而添加3的数字,你会发现这个数字是1101 ,记住二进制加法就像小学(十进制)加法一样,只有当你得到两个而不是十个。

 1101 +
 0011 // 3
    =
10000
    =
 0000 // lose carry bit because integers have a constant number of bits.

因此1101-3 ,翻转你得到的0010这是两位。

链接地址: http://www.djcxy.com/p/9985.html

上一篇: How does the bitwise complement (~) operator work?

下一篇: What are bitwise operators?