Hallo liebe Python-Fans,
ich hab' da ein kleines Problemchen:
Ich weiß nicht, wie ich eine Dezimalzahl binär darstellen soll.
Beispiel (sagen wir 8 Bit, little endian):
29 = 000011101
Es soll angeblich mittels >> und & Operator gehen. Aber wie?
Könnte mir da jemand mal auf die Sprünge helfen ?
Danke!
Grüße
za0
Integer in Binärdarstellung
Hoi
Es gibt kein binäres built-in type in Python. Aber es gibt da diese interessante Seite:
http://aspn.activestate.com/ASPN/Cookbo ... ipe/219300
Rückverwandlung geht beispielsweise so:
Was Dich aber wohl glücklich machen könnte findet sich erst hier:
http://aspn.activestate.com/ASPN/Cookbo ... ipe/111286
Hier findest Du die eigentliche Antwort auf Deine Frage. Hoffe ich jedenfalls. Wenn nicht, kannst Du ja nochmal nachfragen.
Gruß,
Christian
Es gibt kein binäres built-in type in Python. Aber es gibt da diese interessante Seite:
http://aspn.activestate.com/ASPN/Cookbo ... ipe/219300
Rückverwandlung geht beispielsweise so:
Code: Alles auswählen
>>> int('101010',2)
42
Was Dich aber wohl glücklich machen könnte findet sich erst hier:
http://aspn.activestate.com/ASPN/Cookbo ... ipe/111286
Hier findest Du die eigentliche Antwort auf Deine Frage. Hoffe ich jedenfalls. Wenn nicht, kannst Du ja nochmal nachfragen.
Gruß,
Christian
Hi Pythoniers,
wie packe ich Nullen davor(?):
Momentan beschränkt sich die Ausgabe nur auf das höchste Bit
der zu konvertierenden Zahl.
Also bei 23 lautet die Ausgabe '10111'
Ziel wäre dann:
23 = '00010111'
129 = '01000001'
usw
Grüße
za0
wie packe ich Nullen davor(?):
Code: Alles auswählen
bstr = lambda n: n>0 and bstr(n>>1)+str(n&1) or ''
der zu konvertierenden Zahl.
Also bei 23 lautet die Ausgabe '10111'
Ziel wäre dann:
23 = '00010111'
129 = '01000001'
usw
Grüße
za0
Hi,
nun die Lösung hab ich doch noch selbst geschaft:
Grüße
za0
nun die Lösung hab ich doch noch selbst geschaft:
Code: Alles auswählen
import sys # import module sys for sys.stdin.readline()
print "Gib' eine (Integer-) Zahl ein ! : "
input = sys.stdin.readline() # read input
zahl = int(input) # convert input(is string) to int
bits = 8; # how many bit(s) ?
i2b = lambda n: n>0 and i2b(n>>1)+str(n&1) or '' # convert integer to binary
out = '' # out is empty by default
while (len(out)+len(i2b(zahl)))<bits: # while
out += '0';
binzahl = out + i2b(zahl) # merge amount of zeros with converted value
print binzahl # output
za0
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Guten Morgen!
Eine etwas kürzere Variante:
Gruß, mawe
Eine etwas kürzere Variante:
Code: Alles auswählen
print "Zahl: "
zahl = input()
i2b = lambda n: n>0 and i2b(n>>1)+str(n&1) or ''
binzahl = "%08i" % int(i2b(zahl))
print binzahl
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Mahlzeit,
es geht auch noch kürzer:
Gruß
Dookie
es geht auch noch kürzer:
Code: Alles auswählen
print "Zahl: "
zahl = input()
bits = 8
binzahl = "".join(["01"[bool(zahl & 2**x)] for x in xrange(bits-1,-1, -1)])
print binzahl
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
Mahlzeit,
Hehe
Danke für Dein Posting
Grüße
za0
Junge, du "mikrotisierst" wohl alles, was?Dookie hat geschrieben:Mahlzeit,
es geht auch noch kürzer:Code: Alles auswählen
print "Zahl: " zahl = input() bits = 8 binzahl = "".join(["01"[bool(zahl & 2**x)] for x in xrange(bits-1,-1, -1)]) print binzahl
Gruß
Dookie
Hehe
Danke für Dein Posting
Grüße
za0
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
"Ich liebe es wenn ein Code funktioniert!" (Dookie der Hannibal unter den Pythoncodern)
Mit Python2.4 gehts noch um 2 zeichen kürzer:
Gruß
Dookie
Mit Python2.4 gehts noch um 2 zeichen kürzer:
Code: Alles auswählen
binzahl = "".join("01"[bool(zahl & 2**x)] for x in xrange(bits-1,-1,-1))
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
Hoi
Bin gerade erst bei der Arbeit.
Ihr habt da ja wirklich ein paar tolle Sachen zusammengetragen. Chapeau!
Gruß,
Christian
Bin gerade erst bei der Arbeit.
Ihr habt da ja wirklich ein paar tolle Sachen zusammengetragen. Chapeau!
Gruß,
Christian
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
noch eine kleine Optimierung:
Dookie
Code: Alles auswählen
print "Zahl: "
zahl = input()
bits = 8
binzahl = "".join(["01"[zahl>>x & 1] for x in xrange(bits-1,-1,-1)])
print binzahl
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
Hi. Hat das einen tieferen Sinn, bits auf 8 festzusetzen? Ich würde das hier bevorzugen:
mfg Milan
Code: Alles auswählen
import math
print "Zahl: "
zahl = input()
bits = int((math.log(zahl)/math.log(2))+1)
binzahl = "".join(["01"[zahl>>x & 1] for x in xrange(bits-1,-1,-1)])
print binzahl
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Milan,
Denke schon, es hat den Sinn, daß 8 Bit ein Byte darstellen. Besonders bei Logischen Verknüpfungen können auch die vorderen Bits wichtig werden z.B. in dem anderen Thread wo es um XNOR geht.
Andere geläufige Werte sind noch 16, 32, oder 64 Bit oder auch 4 bit (ein sogenanntes Nibble) das sich in Hex mit einer einzigen Stelle (0-9A-Z) darstellen lässt.
Gruß
Dookie
Denke schon, es hat den Sinn, daß 8 Bit ein Byte darstellen. Besonders bei Logischen Verknüpfungen können auch die vorderen Bits wichtig werden z.B. in dem anderen Thread wo es um XNOR geht.
Andere geläufige Werte sind noch 16, 32, oder 64 Bit oder auch 4 bit (ein sogenanntes Nibble) das sich in Hex mit einer einzigen Stelle (0-9A-Z) darstellen lässt.
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
Hach ja, ich bin mal wieder in der Diskussion um den Quellcode vom Problem abgeschweift, das oben 8 bits gesucht waren ... Naja, das wäre jedenfalls die allgemeine Variante, um nur die Zahl binär darzustellen
mfG Milan
mfG Milan
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Macht ja nix
IMHO macht aber Binärdarstellung nur wirklich Sinn wenn alle Bits einer Verarbeitungseinheit (Byte Word Longword) angezeigt werden. Bei Logischen Verknüpfungen sind so die Zusammenhänge offensichtlicher als ohne führende Nullen.
Gruß
Dookie
IMHO macht aber Binärdarstellung nur wirklich Sinn wenn alle Bits einer Verarbeitungseinheit (Byte Word Longword) angezeigt werden. Bei Logischen Verknüpfungen sind so die Zusammenhänge offensichtlicher als ohne führende Nullen.
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]