1

たとえば、-2 または -8 を指定すると、110、11000 になります。ただし、最小の 2 進数を使用する必要があるため、10、1000 を取得したいと考えています。だから私は否定的なものに別の方法を使用する必要があります. LSB 1 に到達するまで 1 と 0 を交換しようとしましたが、方法が見つかりません。

(あなたを助けるために: dekadikos = デミカル、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()
4

1 に答える 1

1

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

代わりに、正、ゼロ、および負をカバーするこれを行うことができます。

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)
于 2016-11-03T21:18:15.753 に答える