如何在Python中为负数创建1的补码和2的补码?
我在反转和处理过程中导致零(一)时遇到一些问题。
我尝试使用res = bin(~int(bin(numb), 2))
,但不起作用。
我需要这样的结果:
Input: -123
Direct code: 11111011
Ones' complement code: 10000100
Two’s complement code: 10000101
答案 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:]