2016-11-03 2 views
1

Wenn ich zum Beispiel gebe: -2 oder -8, bekomme ich 110, 11000. Aber ich möchte 10, 1000, weil es die minimalen Binärzahlen verwenden muss. Also muss ich einen anderen Weg zu den negativen benutzen. Ich habe versucht, 1 und 0 zu tauschen, bis ich LSB 1 erreiche, aber ich finde keinen Weg.Dezimal zu binär: Zweierkomplement, besserer Ausdruck für Negative

(um Ihnen zu helfen: dekadikos = demical, diadikos = binär, boith = Assistent)

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() 
+0

In Ihrer minimalen Zweierkomplement-Darstellung, wie würden Sie einen 2 schreiben? – 3Doubloons

+0

demical: 2 wäre binär: 10 – giorgosan

+0

Wenn eine Dezimalzahl 2 10 ist und Sie möchten, dass -2 auch 10 ist, wie unterscheiden Sie dann 10 Bedeutung -2 und 10 Bedeutung 2? – 3Doubloons

Antwort

1

Sie es, indem sie zwei Änderungen am Code des letzten else Block (kommentiert) lösen könnte:

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) 

Es scheint jedoch eine langwierige Methode, um zu Ihrem gewünschten Ergebnis zu gelangen. Zum einen könnten Sie format(dekadikos, 'b') verwenden, um die Binärdarstellung einer Zahl ohne das Präfix 0b zu erhalten.

Sie können dies stattdessen tun, die positive abdeckt, Null und negativ:

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) 
Verwandte Themen