Binär in Dezimal umrechnen mit dem Programm Tigerjython?
Ich muss mit dem Tigerjython ein Programm schreiben, welches Binäre Zahlen in Dezimalzahlen umrechnet und umgekehrt. Das gleiche auch noch mit dem Octal Zahlensystem. Kennt sich jemand aus und könnte mir helfen?
3 Antworten
Für die Umrechnung vom Binärsystem ins Dezimalsystem bzw. die Umrechnung vom Octalsystem ins Dezimalsystem kann man einfach int() verwenden.
Beispiel mit der Dezimalzahl 123, welche im Binärsystem die Darstellung '1111011' hat und im Octalsystem die Darstellung '173' hat...
int('1111011', base=2)
int('173', base=8)
Das liefert dementsprechend jeweils 123 als Zahl.
===========
Für die Umrechnung vom Dezimalsystem ins Binärsystem kann man bin() verwenden.
Beispiel:
bin(123)
Das liefert dann den String '0b1111011'. Der String beginnt mit '0b', was kennzeichnen soll, dass es sich um einen Binärzahl-String handelt. Dieses Präfix kann man auch wegbekommen, indem man beispielsweise mit [2:] nur die Zeichen des Strings ab der dritten Stelle betrachtet.
bin(123)[2:]
(Ich hätte ja lieber format() verwendet, was aber in TigerJython anscheinend nicht implementiert ist.)
------------
Für die Umrechnung vom Dezimalsystem ins Octalsystem kann man oct() verwenden.
Beispiel:
oct(123)
Das liefert dann den String '0173'. Der String beginnt mit '0', was kennzeichnen soll, dass es sich um einen Octalzahl-String handelt. Dieses Präfix kann man auch wegbekommen, indem man beispielsweise mit [1:] nur die Zeichen des Strings ab der zweiten Stelle betrachtet.
oct(123)[1:]
Wenn du das ausführlicher selbst programmieren möchtest, anstatt auf diese eingebauten Funktionen zurückzugreifen, solltest du dir zunächst einmal überlegen wie du manuell im konkreten Fall (beispielsweise für 123 bzw. '1111011' bzw. '173') die Umrechnung durchführen würdest. Versuche das dann entsprechend im Programm umzusetzen. Das Ergebnis könnte dann beispielsweise so aussehen...
def dec2bin(n):
"""Liefert für eine Ganzzahl n einen String
mit der Darstellung im Binärsystem."""
if n == 0:
return('0')
if n < 0:
return('-'+dec2bin(-n))
octZiffern = []
while n > 0:
octZiffern.append(str(n % 2))
n = n//2
return(''.join(reversed(octZiffern)))
def bin2dec(s):
"""Liefert für einen String s mit der Darstellung einer Zahl
im Binärsystem die entsprechende Dezimalzahl als Ganzzahl."""
if s[0]=='-':
return(-bin2dec(s[1:]))
return(sum([int(ziffer)*2**exp for exp, ziffer in enumerate(s[::-1])]))
def dec2oct(n):
"""Liefert für eine Ganzzahl n einen String
mit der Darstellung im Octalsystem."""
if n == 0:
return('0')
if n < 0:
return('-'+dec2oct(-n))
octZiffern = []
while n > 0:
octZiffern.append(str(n % 8))
n = n//8
return(''.join(reversed(octZiffern)))
def oct2dec(s):
"""Liefert für einen String s mit der Darstellung einer Zahl
im Octalsystem die entsprechende Dezimalzahl als Ganzzahl."""
if s[0]=='-':
return(-oct2dec(s[1:]))
return(sum([int(ziffer)*8**exp for exp, ziffer in enumerate(s[::-1])]))
#Beispiele:
print(dec2bin(123)) #liefert '1111011' als Ausgabe
print(bin2dec('1111011')) #liefert 123 als Ausgabe
print(dec2oct(123)) #liefert '173' als Ausgabe
print(oct2dec('173')) #liefert 123 als Ausgabe
Ich kenne das Programm Tigerjython nicht, aber ich entnehme den Themen einfach mal dass dir Python weiterhilft... Dann sähe die Umwandlung von Dezimal in Binär ungefähr so aus:
binr = "10010010" #hier kannst du noch Usereingabe etc. dazu machen...
decl = 0
val = 128
for bit in binr:
if bit == "1":
decl += val
val /= 2
Schau mal hier
https://stackoverflow.com/questions/21765779/converting-binary-to-decimal-integer-output