十进制转二进制:二进制补码,负数更好表达
Decimal to binary: two's complement, better expression for negatives
当我给出例如:-2或-8时,我得到110、11000。但是我想得到10、1000,因为它必须使用最小二进制数。所以我不得不用另一种方式来否定那些。我试图交换 1 和 0 直到到达 LSB 1,但我找不到办法。
(帮你:dekadikos = demical, diadikos = binary, boith = assistant)
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
块(注释)的代码进行两处更改来解决它:
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)
当我给出例如:-2或-8时,我得到110、11000。但是我想得到10、1000,因为它必须使用最小二进制数。所以我不得不用另一种方式来否定那些。我试图交换 1 和 0 直到到达 LSB 1,但我找不到办法。
(帮你:dekadikos = demical, diadikos = binary, boith = assistant)
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
块(注释)的代码进行两处更改来解决它:
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)