整数的按位否定是什么?

问题描述 投票:-1回答:3

我有一个作业分配来计算整数值的按位否定。它说512进入-513。

我有一个解决方案,做x = 512 y = 512*(-1)+(-1)

这是正确的方法吗?

python-3.x bitwise-operators
3个回答
0
投票

我认为你需要首先否定并添加1。

-x = ~x + 1

所以

~x= -x -1 

0
投票

此属性基于负数以二进制补码表示的方式。要在n位上表示负数$ A $,可以使用| A |的补码到2n,即数字2n- | A |

很容易看出A + ~A = 111 ... 11,因为加法中的位总是0和1而111 ... 111就是2n或2n-1之前的数字。

作为 - | A |由2n- | A |编码,A + ~A = 2n-1,我们可以说-A = ~A + 1或等效~A = -A-1

任何数字,无论是积极的还是消极的都是如此。并且~512 = -512-1 = -513


0
投票
val = 512
print (~val)

输出:

-513

〜按位补码

将1位设置为0,将1设置为0。

enter image description here

例如~2会导致-3。

这是因为逐位运算符首先表示符号和幅度的数字,其为0000 0010(8位运算符),其中MSB是符号位。

然后它将采用负数2,即-2。

-2表示符号和幅度为1000 0010(8位运算符)。

后来它为LSB(1000 0010 + 1)增加了1,它给你1000 0011。

这是-3。

除此以外:

y = -(512+1)
print (y)

输出:

-513

© www.soinside.com 2019 - 2024. All rights reserved.