gpt4 book ai didi

python - 十进制到二进制 : two's complement, 更好的负数表达

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:08 26 4
gpt4 key购买 nike

当我给出例如:-2 或 -8 时,我得到 110, 11000。但我想得到 10, 1000,因为它必须使用最小二进制数。所以我必须用另一种方式来应对消极的情况。我尝试交换 1 和 0 直到达到 LSB 1,但找不到方法。

(为您提供帮助:dekadikos = demical、diadikos = 二进制、boith = 助手)

 dekadikos = input()
while dekadikos != "end" :
dekadikos = int(dekadikos)
if dekadikos > 0 :
diadikos = bin(dekadikos)
diadikos = (diadikos[2:])
n = int(len(diadikos)) + 1
print(diadikos.zfill(n))
elif dekadikos == 0 :
diadikos = bin(dekadikos)
diadikos = (diadikos[2:])
print(diadikos)
else :
dekadikos = abs(dekadikos)
diadikos = bin(dekadikos)
diadikos = (diadikos[2:])
n = int(len(diadikos)) + 1
diadikos = diadikos.zfill(n)
boithdekadikos = 2**n - dekadikos
diadikos = bin(boithdekadikos)
diadikos = diadikos[2:]
print (diadikos)
dekadikos = input()

最佳答案

您可以通过对最后一个 else block 的代码进行两处更改(已注释)来解决此问题:

else :
dekadikos = abs(dekadikos)
diadikos = bin(dekadikos-1) # subtract 1
diadikos = (diadikos[2:])
n = int(len(diadikos)) + (dekadikos>1) # add 1 except for 1
diadikos = diadikos.zfill(n)
boithdekadikos = 2**n - dekadikos
diadikos = bin(boithdekadikos)
diadikos = diadikos[2:]
print (diadikos)

不过,要达到您想要的结果,这似乎是一个漫长的方法。例如,您可以使用 format(dekadikos, 'b') 获取不带 0b 前缀的数字的二进制表示形式。

您可以这样做,它涵盖正数、零和负数:

dekadikos = int(dekadikos)
diadikos = '0' + format(abs(dekadikos)-(dekadikos<0), 'b')
if dekadikos == 0:
diadikos = '0'
elif dekadikos < 0:
diadikos = format(2**(len(diadikos)-(dekadikos==-1)) + dekadikos, 'b')
print (diadikos)

关于python - 十进制到二进制 : two's complement, 更好的负数表达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40392233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com