Python 二进制负数(一和二的补码)
如何在Python中为负数创建1的补码和2的补码代码 在这个过程中,我遇到了一些反转和前导零(1)的问题。 我试图使用res=bin(~int(bin(numb),2)),但它不起作用。 我需要这样的结果:Python 二进制负数(一和二的补码),python,python-3.x,Python,Python 3.x,如何在Python中为负数创建1的补码和2的补码代码 在这个过程中,我遇到了一些反转和前导零(1)的问题。 我试图使用res=bin(~int(bin(numb),2)),但它不起作用。 我需要这样的结果: Input: -123 Direct code: 11111011 Ones' complement code: 10000100 Two’s complement code: 10000101 运算符-是两个人的补码,~是一个人的补码。两者的表示都是负数,因为python整数有无限位数。
Input: -123
Direct code: 11111011
Ones' complement code: 10000100
Two’s complement code: 10000101
运算符
-
是两个人的补码,~
是一个人的补码。两者的表示都是负数,因为python整数有无限位数。正表示无限0
s,负无限1
s。对于显示,您需要将数字截断为有限的位数
>>> '{:08b}'.format(-123 & 0xff)
'10000101'
>>> '{:08b}'.format(~123 & 0xff)
'10000100'
>
您可以这样做来计算2的补偿:
def extra(x, bits = 64):
mask = (1 << bits) - 1
if x < 0:
x = ((abs(x) ^ mask) + 1)
return bin(x)[2:]
def额外值(x,位=64):
mask=(1 Python本机不使用1/2的补码,bin(-123)='-0b1111011'
。您需要自己编写逻辑来生成其他二进制字符串表示形式。我需要它就像练习一样,而不是用于工作项目,所以我需要一个解决方案,以其他方式在输出中使用符号位。
def reverse(y, bits = 64):
mask = (1 << bits) - 1
if y < 0:
y = (abs(y) ^ mask)
return bin(y)[2:]