在Python中查找数字的补码
我试图在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] = "
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
而(inumb2
是一个空列表。它没有任何要处理(和更新)的元素。您需要的是字节数组,而不是列表(或字符串
):
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)
?你是指“一个补码”还是“两个补码”或“位补码”(哪个与补语相同)或“逻辑补语”或其他补语?