394 Stimmen

Wie kann man binäre Literale in Python ausdrücken?

Wie drückt man eine ganze Zahl als Binärzahl mit Python-Literalen aus?

Ich konnte die Antwort für Hex leicht finden:

>>> 0x12AF
4783
>>> 0x100
256

und oktal:

>>> 01267
695
>>> 0100
64

Wie verwendet man Literale, um Binärzahlen in Python auszudrücken?


Zusammenfassung der Antworten

  • Python 2.5 und früher: kann binär ausdrücken mit int('01010101111',2) aber nicht mit einer wörtlichen Rede.
  • Python 2.5 und früher: Es gibt auf keinen Fall um binäre Literale auszudrücken.
  • Python 2.6 beta: Sie können so vorgehen: 0b1100111 o 0B1100111 .
  • Python 2.6 beta: wird auch erlauben 0o27 o 0O27 (das zweite Zeichen ist der Buchstabe O), um ein Oktal darzustellen.
  • Python 3.0 Beta: Dasselbe wie 2.6, erlaubt aber nicht mehr die älteren 027 Syntax für Oktale.

345voto

Andreas Thomas Punkte 4170

Als Referenz. Zukunft Python-Möglichkeiten:
Ab Python 2.6 können Sie binäre Literale mit dem Präfix 0b o 0B :

>>> 0b101111
47

Sie können auch die neue bin Funktion, um die binäre Darstellung einer Zahl zu erhalten:

>>> bin(173)
'0b10101101'

Entwicklungsversion der Dokumentation: Was ist neu in Python 2.6

83voto

Louis Brandy Punkte 17498
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

Eine andere Möglichkeit.

41voto

Wie kann man binäre Literale in Python ausdrücken?

Es handelt sich nicht um "binäre" Literale, sondern um "ganzzahlige Literale". Ganzzahlige Literale mit binärem Format können Sie mit einem 0 gefolgt von einer B o b gefolgt von einer Reihe von Nullen und Einsen, zum Beispiel:

>>> 0b0010101010
170
>>> 0B010101
21

Aus dem Python 3 docs sind die Möglichkeiten zur Bereitstellung ganzer Literale in Python:

Ganzzahlige Literale werden durch die folgenden lexikalischen Definitionen beschrieben:

integer      ::=  decinteger | bininteger | octinteger | hexinteger
decinteger   ::=  nonzerodigit (["_"] digit)* | "0"+ (["_"] "0")*
bininteger   ::=  "0" ("b" | "B") (["_"] bindigit)+
octinteger   ::=  "0" ("o" | "O") (["_"] octdigit)+
hexinteger   ::=  "0" ("x" | "X") (["_"] hexdigit)+
nonzerodigit ::=  "1"..."9"
digit        ::=  "0"..."9"
bindigit     ::=  "0" | "1"
octdigit     ::=  "0"..."7"
hexdigit     ::=  digit | "a"..."f" | "A"..."F"

Es gibt keine Begrenzung für die Länge von Ganzzahl-Literalen, abgesehen von dem, was im verfügbaren Speicher gespeichert werden kann.

Beachten Sie, dass führende Nullen in einer Dezimalzahl, die nicht Null ist, nicht erlaubt sind. Dies dient der Disambiguierung mit Oktal-Literalen im C-Stil, die in Python vor Version 3.0 verwendet hat.

Einige Beispiele für Ganzzahl-Literale:

7     2147483647                        0o177    0b100110111
3     79228162514264337593543950336     0o377    0xdeadbeef
      100_000_000_000                   0b_1110_0101

Geändert in Version 3.6: Unterstriche sind jetzt zur Gruppierung in Literalen erlaubt.

Andere Möglichkeiten, binär auszudrücken:

Sie können die Nullen und Einsen in einem String-Objekt haben, das manipuliert werden kann (obwohl Sie wahrscheinlich nur bitweise Operationen auf der ganzen Zahl in den meisten Fällen tun sollten) - übergeben Sie einfach int die Zeichenfolge von Nullen und Einsen und die Basis, die Sie konvertieren von (2):

>>> int('010101', 2)
21

Optional können Sie die 0b o 0B Vorwahl:

>>> int('0b0010101010', 2)
170

Wenn Sie sie bestehen 0 als Basis angeben, wird die Basis 10 angenommen, wenn die Zeichenkette nicht mit einem Präfix versehen ist:

>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21

Konvertierung von int zurück in menschenlesbares Binärformat:

Sie können eine ganze Zahl an bin übergeben, um die String-Darstellung eines binären Literales zu sehen:

>>> bin(21)
'0b10101'

Und Sie können kombinieren bin y int hin und her zu gehen:

>>> bin(int('010101', 2))
'0b10101'

Sie können auch eine Formatangabe verwenden, wenn Sie eine Mindestbreite mit vorangestellten Nullen wünschen:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'

3voto

Ranjeet R Patil Punkte 223

Ich habe dies in Python 3.6.9 versucht

Binär in Dezimal umwandeln

>>> 0b101111
47

>>> int('101111',2)
47

Dezimal in Binär umwandeln

>>> bin(47)
'0b101111'

Setzen Sie eine 0 als zweiten Parameter ein, nimmt Python ihn als Dezimalwert an.

>>> int('101111',0)
101111

2voto

Mehmet Ugurbil Punkte 23

Die 0 am Anfang gibt an, dass die Basis 8 (nicht 10) ist, was ziemlich leicht zu erkennen ist:

>>> int('010101', 0)
4161

Wenn Sie nicht mit einer 0 beginnen, nimmt Python an, dass die Zahl zur Basis 10 ist.

>>> int('10101', 0)
10101

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X