/ / Konvertiere Binär in Dezimal - unterwerfe die Logik - Python, Python-2.7, Python-3.x, Binär

Konvertieren Sie Binär in Dezimal - unterlegen der Logik - Python, Python-2.7, Python-3.x, Binär

Ich musste Binär zu Dezimal konvertieren und ich fand diesen Code hier, es funktioniert perfekt:

binary_Op1 = raw_input("enter a number: ")
decimal = 0
for digit in binary_Op1:
decimal = decimal*2 + int(digit)
print decimal

Die Sache ist, ich habe Schwierigkeitendie Logik dahinter verstehen ... Warum multiplizieren wir die dezimale Variable mit 2? Warum ist die Dezimalvariable auf = 0 gesetzt? Warum haben wir jedes Mal die Ziffer? und so weiter(:

Vielen Dank.

Antworten:

2 für die Antwort № 1

Lassen Sie mich das am Beispiel von 10101 erläutern.

1 should be multiplied by 2^4
0 should be multiplied by 2^3
1 should be multiplied by 2^2
0 should be multiplied by 2^1
1 should be multiplied by 2^0
and Add everything.

Das Programm beginnt mit der Multiplikation von 2 jedes Mal, wenn es auf eine Zahl trifft. Also wird zuerst die erste 1 4-mal und die erste 0 3-mal und die selbe bis zur letzten 1 multipliziert.

Etwas wie das.

1 *2 *2 *2 *2
0 *2 *2 *2
1 *2 *2
0 *2
1

1 für die Antwort № 2

Es ist weniger eine Programmierfrage als eine mathematische Frage.

Versuchen Sie ein Beispiel: 1100101

decimal = 0

# First digit: 1
decimal = decimal*2 + int(digit)  # decimal = 0*2 + 1 = 1

# Second digit: 1
decimal = decimal*2 + int(digit)  # decimal = 1*2 + 1 = 3

# Third digit: 0
decimal = decimal*2 + int(digit)  # decimal = 3*2 + 0 = 6

# Fourth digit: 0
decimal = decimal*2 + int(digit)  # decimal = 6*2 + 0 = 12

# Fifth digit: 1
decimal = decimal*2 + int(digit)  # decimal = 12*2 + 1 = 25

# Sixth digit: 0
decimal = decimal*2 + int(digit)  # decimal = 25*2 + 0 = 50

# Seventh digit: 1
decimal = decimal*2 + int(digit)  # decimal = 50*2 + 1 = 101

Voilá! Antwort ist 101.

Es funktioniert, indem jeder verdoppelt wird 1so oft wie Ziffern folgen. Auf diese Weise erhalten höherwertige Stellen tatsächlich einen höheren Wert (1,2,4,8,16,32 ...)

Dies funktioniert auch für das Dezimalsystem:

Versuchen: 1337

decimal = 0

# First digit: 1
decimal = decimal*10 + digit  # decimal = 0*10 + 1 = 1

# Second digit: 3
decimal = decimal*10 + digit  # decimal = 1*10 + 3 = 13

# Third digit: 3
decimal = decimal*10 + digit  # decimal = 13*10 + 3 = 133

# Fourth digit: 7
decimal = decimal*10 + digit  # decimal = 133*10 + 7 = 1337

Voilá! Die Antwort ist 1337.

Nachtrag: Das Horners Methode verwendet das gleiche Prinzip, um Polynome an einem gegebenen Punkt auszuwerten.