二进制负数(1的补码和2的补码)

2024-06-12 23:50:52 发布

您现在位置: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

Tags: 代码inputbin过程onescoderesint
2条回答

您可以这样做来计算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:]

运算符-是二的补码,~是一的补码。两者的表示都是负数,因为python整数有无限位。正值表示无限0s,负值表示无限1s。要显示,需要将数字截断为有限的位数。你知道吗

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

相关问题 更多 >