Seite 1 von 1
Verstaendnisproblem beim Dualsystem
Verfasst: Sonntag 20. Oktober 2013, 20:04
von ZimZalabim
Hallo Zusammen
Ich bin ein Neuling sowohl bei Python3 als auch bein Programmieren an sich. Programmieren tu ich mit Gedit und python3 3.3.1 im Terminal(Betriebsystem ist Lubuntu).
Auf Wikipedia hab ich mir das Umrechnen von Dezimal in Binaer Zahlen angesehen. Die erste Varieante mit Modulo hab ich hin gekriegt.
Code: Alles auswählen
dez_zahl = 127
bin_zahl = []
a = dez_zahl
while a > 0:
quotient = a / 2
quotient = int(quotient)
rest = a % 2
if rest == 1:
bin_zahl.append(1)
else:
bin_zahl.append(0)
a = a - quotient - rest
print ("dez_zahl = ",dez_zahl," bin_zahl = ",bin_zahl)
Das Fuktioniert auch, aber die zweite Varieante versteh ich nicht.
Genauer wie soll das mit der Wertigkeit funktionieren.
Code: Alles auswählen
dez_zahl = 127 # 01111111 binaer
bin_zahl = []
zwpot = 0
x = 0
while zwpot < dez_zahl:
zwpot = pow(2,x)
x = x + 1
'''
die Schleife müsste bei 2^7 = 128 abbrechen, x = 8
wenn ich das richtig verstehe s = 127(dez) - 128(zwpot) --> -1
'''
So weit bin ich bis jetzt.
Vielen Dank für eure Hilfe
Re: Verstaendnisproblem beim Dualsystem
Verfasst: Sonntag 20. Oktober 2013, 20:18
von cofi
Willkommen zum Forum, zum Programmieren und zu Python!
Damit wir dir helfen koennen: Was verstehst du denn nicht und was erwartest du als Ergebnis?
Waehrend dein erstes Fragment tatsaechlich die binaere Repraesentation (alles nur Repraesentationen! Es gibt keine Binaerzahlen oder Dezimalzahlen, das sind nur verschiedene Schreibweisen!) berechnet, errechnet das zweite Fragment wie viele Bits man benoetigt um die Zahl binaer zu kodieren (d.h. wie viele stellen die binaere Repraesentation hat).
Re: Verstaendnisproblem beim Dualsystem
Verfasst: Sonntag 20. Oktober 2013, 20:52
von BlackJack
Noch ein Tipp zum ersten Beispiel und dem `quotient`: Es gibt neben dem ``/``- auch den ``//``-Operator der direkt nur den ganzzahligen Anteil des Divisionsergebnis liefert. Und wenn man das noch kompakter schreiben möchte, gibt es die `divmod()`-Funktion die sowohl den ganzzahligen Anteil als auch den Rest der Division liefert.
Ausserdem ist das ``if``/``else`` überflüssig denn beim Rest kann nur 1 oder 0 heraus kommen. Und immer wenn eine 1 heraus kommt, hängst Du eine 1 an das Ergebnis und immer wenn es eine 0 ist dann hängst Du eine 0 an das Ergebnis. Ergo kannst Du auch gleich den Rest selbst an das Ergebnis anhängen.
Re: Verstaendnisproblem beim Dualsystem
Verfasst: Sonntag 20. Oktober 2013, 23:51
von ZimZalabim
@cofi: Ich weis das binaer nur einer andere Darstellung ist
@BlackJack: Danke für die Tipps.
Wikipedia --> Dualsystem
Eine andere Methode ist die Subtraktionsmethode. Bei dieser subtrahiert man jeweils die größtmögliche Zweierpotenz von der umzurechnenden Dezimalzahl. Wenn die nächstgrößte Zweierpotenz größer als die Differenz der vorherigen Subtraktion ist, so ist die Wertigkeit der nächsten Binärstelle 0. Andernfalls ist die nächste Binärstelle 1, und die Zweierpotenz wird abgezogen. Um diese Methode zu verdeutlichen, bedienen wir uns weiter des Beispiels der Zahl 41:
Für dez_zahl = 41 ist das erste ergebnis = dez_zahl - 2^5 = 9, Wie kommt man darauf das die Werteigkeit hier 1 ist?
Ich weis das da 101001 raus kommt. Was ist da mit diverenz gemeint? Da wird nicht 2^4=16 mit 9 verglichen dann müsste wertigkeit = 0 sein.
Vielleicht wirds jetzt klarer wo es harkt.
Re: Verstaendnisproblem beim Dualsystem
Verfasst: Montag 21. Oktober 2013, 07:58
von jerch
@ZimZalabim:
Dreh das doch mal um und versuche die Zahl 41 aus 2^n Summanden zu bilden, dann wird Dir klar, wofür die 1/0 steht. (Tipp: nimms als Faktor der Summanden)
Re: Verstaendnisproblem beim Dualsystem
Verfasst: Montag 21. Oktober 2013, 19:02
von ZimZalabim
@jerch: 41(dez) = 2^5 + 2^3 + 2^0 = 32 + 8 + 1 = 101001
so weit so gut. Wenn i = 0 ist und 2^i, dann müsst i erst 3 dann 2 erhöht werden. wenn es dann noch mal um 1 erhöht wird, also i = 6, ist 2^i größer als 41.
Irgend wie seh ich immer noch nicht wie das funktioniert. Vielleicht seh ich auch den Wald vor lauter Bäumen nicht.
Re: Verstaendnisproblem beim Dualsystem
Verfasst: Montag 21. Oktober 2013, 19:07
von jerch
@ZimZalabim:
Das mit dem Faktor hast du überlesen:
1 * 2⁵ +
0 * 2⁴ +
1 * 2³ +
0 * 2² +
0 * 2¹ +
1 * 2⁰
Das ist übrigens für alle Stellenwertsysteme so, z.B.:
1990 =
1 * 10³ +
9 * 10² +
9 * 10¹ +
0 * 10⁰
Vgl aus Wikipedia (
http://de.wikipedia.org/wiki/Stellenwertsystem):
