Frage

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

Ich war leicht in der Lage zu finden die Antwort für hex:

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

und oktal:

>>> 01267
695
>>> 0100
64

Wie verwenden Sie literalen Ausdrücken binary in Python?


Zusammenfassung der Antworten

  • Python 2.5 und frühere Versionen:kann express binary mit int('01010101111',2) aber nicht mit einem literal.
  • Python 2.5 und frühere Versionen:es ist no way um auszudrücken, binäre Literale.
  • Python 2.6 beta:Das können Sie gerne tun, so: 0b1100111 oder 0B1100111.
  • Python 2.6 beta:auch erlauben 0o27 oder 0O27 (zweite Zeichen ist der Buchstabe O) zur Darstellung einer Oktalzahl.
  • Python 3.0 beta:Gleiche wie 2,6, wird aber nicht mehr erlauben, die ältere 027 syntax für octals.
War es hilfreich?

Lösung

Für Referenz—Zukunft Python Möglichkeiten:
Beginnend mit Python 2.6 können Sie express binäre Literale mit dem Präfix 0b oder 0B:

>>> 0b101111
47

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

>>> bin(173)
'0b10101101'

Entwicklung version der Dokumentation: What ' s New in Python 2.6

Andere Tipps

>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

Ein anderer Weg.

How do you express binary literals in Python?

Sie sind nicht "Binär" - Literale, sondern "integer-Literale".Sie können express-integer-Literale mit einem binären format mit einer 0 gefolgt von einem B oder b gefolgt von einer Reihe von Nullen und Einsen, zum Beispiel:

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

Aus der Python-3 docs, diese werden die Möglichkeiten der Bereitstellung von integer-literals in Python:

Integer-Literale werden durch die nachfolgend beschriebenen lexikalischen Definitionen:

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 integer-Literale abgesehen von dem, was können gespeichert werden in Speicher verfügbar.

Beachten Sie, dass führende Nullen in einer nicht-null-Komma-Zahl, sind nicht erlaubt.Dies ist für disambiguation mit C-Stil oktal-Literale, die in Python verwendet vor der version 3.0.

Einige Beispiele für integer-Literale:

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

Geändert in version 3.6: Unterstriche dürfen nun für die Gruppierung im Literale.

Andere Möglichkeiten zum Ausdruck binary:

Sie können die Nullen und Einsen in ein string-Objekt, das manipuliert werden können (obwohl Sie sollten wahrscheinlich nur tun, bitweise Operationen auf integer-in den meisten Fällen) - nur pass int-string von Nullen und Einsen, und die Basis, die Sie konvertieren aus (2):

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

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

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

Wenn Sie es passieren 0 als Basis, es wird davon ausgegangen Basis 10, wenn die Zeichenfolge nicht angeben mit Präfix:

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

Beim konvertieren von int zurück zu human-readable binary:

Sie übergeben können, die eine Ganzzahl bin, um zu sehen, die string-Darstellung eines binären literalen:

>>> bin(21)
'0b10101'

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

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

Sie können eine format-Spezifikation als gut, wenn Sie wollen zu haben eine minimale Breite, mit vorstehenden Nullen:

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

0 in der start-hier gibt an, dass die base 8 (nicht 10),, die ist ziemlich leicht zu sehen:

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

Wenn Sie nicht beginnen mit einer 0, dann python nimmt die Zahl zur Basis 10.

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

Soweit ich sagen kann, Python, bis 2.5, nur unterstützt hexadezimal - & oktale Literale.Ich habe einige Diskussionen über das hinzufügen von Binär in zukünftigen Versionen, aber nichts definitives.

Ich bin ziemlich sicher, dass dies eines der Dinge, die durch einen Wechsel in Python 3.0 mit vielleicht bin (), um mit zu gehen hex() und oct().

EDIT:lbrandy die Antwort richtig ist, in allen Fällen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top