二进制负数(一个补码和两个补码)

时间:2018-10-13 11:13:30

标签: python python-3.x

如何在Python中为负数创建1的补码和2的补码?

我在反转和处理过程中导致零(一)时遇到一些问题。 我尝试使用res = bin(~int(bin(numb), 2)),但不起作用。 我需要这样的结果:

Input: -123
Direct code: 11111011
Ones' complement code: 10000100
Two’s complement code: 10000101

2 个答案:

答案 0 :(得分:0)

运算符-是二进制补码,~是二进制补码。两者的表示均为负数,因为python整数具有无限数字。正意味着无限0,负无限1。为了显示,您需要将数字截断为有限的数字。

>>> '{:08b}'.format(-123 & 0xff)
'10000101'
>>> '{:08b}'.format(~123 & 0xff)
'10000100'
>

答案 1 :(得分:0)

您可以执行以下操作来计算2的满意程度:

def extra(x, bits = 64):
    mask = (1 << bits) - 1
    if x < 0:
        x = ((abs(x) ^ mask) + 1)
    return bin(x)[2:]

并像这样补充1:

def reverse(y, bits = 64):
    mask = (1 << bits) - 1
    if y < 0:
        y = (abs(y) ^ mask)
    return bin(y)[2:]