为什么~2等于-3?~操作符是如何工作的?
当前回答
下面是一种解释:
让我们以~2 = -3为例(为了简单起见,使用8位系统进行解释)
1)我们有2——> 00000010
2)我们可以得到~2—> 11111101 #通过简单地交换位。
[但常见的错误是,有些人试图将~2的二进制值直接转换为十进制(以10为基数)数字,在这种情况下,它是253。这不是我们寻找互补的方式。
3)现在我们找到一个二进制数,将其与二进制值2~相加得到0(00000000)作为结果。 在这种情况下,它是00000011(即3),因为如果我们将00000011加到我们已有的11111101,我们得到100000000,但由于我们使用的是8位系统,1在第9位,它被完全忽略,所以我们最终得到00000000。
4)从点(3)我们可以说~2+3 = 0,因此我们可以说~2 = -3
注意:-3的值是简单的11111101,可以用同样的方式解释。
其他回答
基本上,动作是一种补充,而不是否定。
这里x= ~x产生的结果总是-(x+1)。
X = ~2
- (2 + 1)
-3
这里,二进制(8位)中的2是00000010,它的1的补码是11111101, 1的补数减去1得到1111110 -1 = 11111100, 这里的符号是-作为第8个字符(从R到L)是1 求1的补,no。即00000011 = 3 符号是负的所以这里是-3。
位操作符是一个一元操作符,根据我的经验和知识,它的工作原理是符号和幅度方法。
例如~2的结果是-3。
这是因为逐位操作符将首先以符号和幅度表示数字,即0000 0010(8位操作符),其中MSB是符号位。
然后取2的负数,也就是-2。
-2用符号和幅度表示为1000 0010(8位运算符)。
之后,它将1添加到LSB(1000 0010 + 1),得到1000 0011。
也就是-3。
记住,负数被存储为正数的补数。作为一个例子,这里是-2在2的补码中的表示:(8位)
1111 1110
得到它的方法是取一个数字的二进制表示,取它的补位(所有位的倒数),然后加1。Two从0000 0010开始,通过反转位,我们得到1111 1101。加1得到上面的结果。第一个位是符号位,表示负号。
那么让我们看看如何得到~2 = -3:
这里还有两个:
0000 0010
简单地翻转所有的位,我们得到:
1111 1101
那么-3在2的补中是什么样的呢?从正3,0000 0011开始,将所有位翻转到1111 1100,并添加1位成为负值(-3),1111 1101。
所以如果你简单地将2中的位反转,你就得到了2的-3的补表示。
补运算符(~)只是翻转位。由机器来解释这些比特。
很简单:
Before starting please remember that
1 Positive numbers are represented directly into the memory.
2. Whereas, negative numbers are stored in the form of 2's compliment.
3. If MSB(Most Significant bit) is 1 then the number is negative otherwise number is
positive.
你会发现~2:
Step:1 Represent 2 in a binary format
We will get, 0000 0010
Step:2 Now we have to find ~2(means 1's compliment of 2)
1's compliment
0000 0010 =================> 1111 1101
So, ~2 === 1111 1101, Here MSB(Most significant Bit) is 1(means negative value). So,
In memory it will be represented as 2's compliment(To find 2's compliment first we
have to find 1's compliment and then add 1 to it.)
Step3: Finding 2's compliment of ~2 i.e 1111 1101
1's compliment Adding 1 to it
1111 1101 =====================> 0000 0010 =================> 0000 0010
+ 1
---------
0000 0011
So, 2's compliment of 1111 1101, is 0000 0011
Step4: Converting back to decimal format.
binary format
0000 0011 ==============> 3
In step2: we have seen that the number is negative number so the final answer would
be -3
So, ~2 === -3