Python 二进制负数(一和二的补码)

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整数有无限位数。

如何在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整数有无限位数。正表示无限
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:]