Python 3.x ~Python 3中的二进制1补码
只是对二元一的补码如何工作有疑问。 例如(在python中): 给出一个输出:-Python 3.x ~Python 3中的二进制1补码,python-3.x,bitwise-operators,Python 3.x,Bitwise Operators,只是对二元一的补码如何工作有疑问。 例如(在python中): 给出一个输出:- -61 60的二进制补码不是: a = 0011 1100 ~a = 1100 0011 它是否应该是-60 我知道我错了,但为什么它会提前到-61?你就快到了1100 0011实际上是-61 以下是如何将负二进制转换为十进制: 倒位 加1 转换成十进制 加负号 因此: ~是位反转运算符,并且: x的位反转定义为-(x+1) 这就是整数的位反转的工作原理 二者的互补轮很好地体现了这一点: 如您所见,1的位反
-61
60
的二进制补码不是:
a = 0011 1100
~a = 1100 0011
它是否应该是-60
我知道我错了,但为什么它会提前到
-61
?你就快到了<代码>1100 0011实际上是-61
以下是如何将负二进制转换为十进制:
~
是位反转运算符,并且:
x的位反转定义为-(x+1)
这就是整数的位反转的工作原理
二者的互补轮很好地体现了这一点:
如您所见,1的位反转为-2,2的位反转为-3,…,60的位反转为-61。在所有现代计算机中,2的补码二进制用于表示整数(而不是经典二进制表示)。 如中所确认: 2的补码二进制与经典二进制相同 表示正整数,但对于 负数。负数通过执行 二对其绝对值的补码运算 负数-x的2的补码是使用(x-1)的位模式写入的,所有位都被补码(从1切换到0或从0切换到1) 示例: 2的-15的补码:
-15 => complement(x-1) => complement(15-1) => complement(14) => complement(1110) => 0001
Python的((按位NOT)运算符返回数字的1的补码
示例:
print(~14) # Outputs -15
14是(1110)的2的补码二进制形式
在这里,~14将把这种形式的所有位(即1的补码)反转为0001。
然而,0001实际上是2的-15的补码
记住整数的按位NOT运算的一个简单规则是-(x+1)
1100 0011
+ 0011 1101
-------------
1 0000 0000
-15 => complement(x-1) => complement(15-1) => complement(14) => complement(1110) => 0001
print(~14) # Outputs -15
print(~60) # Outputs -61
print(~-60) # Outputs 59