在Python中查找数字的补码

在Python中查找数字的补码,python,python-3.x,Python,Python 3.x,我试图在Python中找到一个数字的补码。我知道还有其他的解决办法,但我正在努力制定自己的解决办法。 我的第一次尝试: def findComplement(self, num): """ :type num: int :rtype: int """ numb = str(num) i = 0 while(i<=len(numb)): if numb[i] == "0": numb[i] = "

我试图在Python中找到一个数字的补码。我知道还有其他的解决办法,但我正在努力制定自己的解决办法。 我的第一次尝试:

def findComplement(self, num):
    """
    :type num: int
    :rtype: int
    """
    numb = str(num)
    i = 0
    while(i<=len(numb)):
        if numb[i] == "0":
            numb[i] = "1"
        else:
            numb[i] = "0"
        i=i+1
    return int(numb)

numb2
是一个空列表。它没有任何要处理(和更新)的元素。您需要的是一个
字节数组
,而不是
列表
(或
字符串
):

def findComplement(self,num):
"""
:type num:int
:rtype:int
"""
numb=bytearray(str(num),'utf-8')
i=0

而(i
numb2
是一个空列表。它没有任何要处理(和更新)的元素。您需要的是
字节数组,而不是
列表(或
字符串
):

def findComplement(self,num):
"""
:type num:int
:rtype:int
"""
numb=bytearray(str(num),'utf-8')
i=0

而(i你有一些问题

首先,您没有正确地将输入转换为二进制字符串。这可以通过
num=bin(num)[2://code>而不是
num=str(num)
来完成

第二,您正在尝试索引到空的
numb2
列表中。实际上,不需要创建单独的
numb2
列表,您可以像第一次尝试那样直接对
numb
字符串进行操作。例如:

for i in range(len(numb)):
    if numb[i] == "0":
        numb[i] = "1"
    else:
        numb[i] = "0"

最后,要将二进制字符串转换回int,您应该执行
int(numb,2)
而不是
int(numb)

您有一些问题

首先,您没有正确地将输入转换为二进制字符串。这可以通过
num=bin(num)[2://code>而不是
num=str(num)
来完成

第二,您正在尝试索引到空的
numb2
列表中。实际上,不需要创建单独的
numb2
列表,您可以像第一次尝试那样直接对
numb
字符串进行操作。例如:

for i in range(len(numb)):
    if numb[i] == "0":
        numb[i] = "1"
    else:
        numb[i] = "0"

最后,要将二进制字符串转换回int,您应该执行
int(numb,2)
而不是
int(numb)

您不是指~运算符吗,例如:

def findComplement(self, num):
    return ~num

你不是指~操作符吗,例如:

def findComplement(self, num):
    return ~num

由于其他答案涵盖了您的主要问题,您也可以使用字典将
1
映射到
0
,反之亦然:

>>> d = {'0': '1', '1': '0'}
>>> s = '0101'
>>> ''.join(d[x] for x in s)
'1010'

由于其他答案涵盖了您的主要问题,您也可以使用字典将
1
映射到
0
,反之亦然:

>>> d = {'0': '1', '1': '0'}
>>> s = '0101'
>>> ''.join(d[x] for x in s)
'1010'

你是指复数意义上的补码吗?请定义补码。你的错误是因为当你试图访问索引0时,
numb2=[]
。你是指
numb2.append(j)
?你是指“一个补码”还是“两个补码”或“位补码”(与一个补码相同)还是“逻辑补码”或其他类型的补码?你是指复数意义上的补码吗?请定义补码。你的错误是因为当你试图访问索引0时,
numb2=[]
。你是指
numb2.append(j)
?你是指“一个补码”还是“两个补码”或“位补码”(哪个与补语相同)或“逻辑补语”或其他补语?