たとえば、-2または-8を指定すると、110、11000が得られます。ただし、最小の2進数を使用する必要があるため、10、1000を取得したいと思います。だから私は否定的なものに別の方法を使用する必要があります。LSB 1に到達するまで1と0を交換しようとしましたが、方法が見つかりません。
(あなたを助けるために: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
ブロック(コメント付き)のコードに2つの変更を加えることで、これを解決できます。
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)
しかし、希望する結果を得るには長い方法のようです。1つはformat(dekadikos, 'b')
、0b
接頭辞なしで数値の2進表現を取得するために使用できます。
代わりにこれを行うことができます。これは、正、ゼロ、および負をカバーします。
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)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加