syntax - Wie drückt man binäre Literale in Python aus?

Translate

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

Ich konnte leicht die Antwort für hex finden:

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

und oktal:

>>> 01267
695
>>> 0100
64

Wie verwenden Sie Literale, um Binärdateien in Python auszudrücken?


Zusammenfassung der Antworten

  • Python 2.5 und früher: Kann Binär mit ausdrückenint('01010101111',2)aber nicht mit einem wörtlichen.
  • Python 2.5 und früher: gibt esauf keinen Fallbinäre Literale auszudrücken.
  • Python 2.6 Beta: Sie können Folgendes tun:0b1100111oder0B1100111.
  • Python 2.6 Beta: erlaubt auch0o27oder0O27(zweites Zeichen ist der Buchstabe O), um ein Oktal darzustellen.
  • Python 3.0 Beta: Wie 2.6, lässt jedoch ältere nicht mehr zu027Syntax für Oktale.
This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Als Referenz-ZukunftPython-Möglichkeiten:
Ab Python 2.6 können Sie binäre Literale mit dem Präfix ausdrücken0boder0B:

>>> 0b101111
47

Sie können auch das neue verwendenBehälterFunktion zum Abrufen der binären Darstellung einer Zahl:

>>> bin(173)
'0b10101101'

Entwicklungsversion der Dokumentation:Was ist neu in Python 2.6?

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

Ein anderer Weg.

Quelle
Translate

Wie drückt man binäre Literale in Python aus?

Sie sind keine "binären" Literale, sondern "ganzzahlige Literale". Sie können ganzzahlige Literale mit einem Binärformat mit a ausdrücken0gefolgt von einemBoderbgefolgt von einer Reihe von Nullen und Einsen, zum Beispiel:

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

Aus dem Python 3docsDies sind die Möglichkeiten, um ganzzahlige Literale in Python bereitzustellen:

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 Ganzzahlliteralen, abgesehen davon, was im verfügbaren Speicher gespeichert werden kann.

Beachten Sie, dass führende Nullen in einer Dezimalzahl ungleich Null nicht zulässig sind. Dies dient zur Disambiguierung mit Oktalliteralen im C-Stil, die Python vor Version 3.0 verwendet hat.

Einige Beispiele für ganzzahlige Literale:

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

In Version 3.6 geändert:Unterstriche sind jetzt für Gruppierungszwecke in Literalen zulässig.

Andere Möglichkeiten, Binärdateien auszudrücken:

Sie können die Nullen und Einsen in einem Zeichenfolgenobjekt haben, das bearbeitet werden kann (obwohl Sie in den meisten Fällen wahrscheinlich nur bitweise Operationen an der Ganzzahl ausführen sollten) - übergeben Sie einfach die Zeichenfolge aus Nullen und Einsen und die Basis, von der Sie konvertieren (2) ):

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

Sie können optional die haben0boder0BPräfix:

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

Wenn Sie es bestehen0Als Basis wird Basis 10 angenommen, wenn die Zeichenfolge kein Präfix enthält:

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

Konvertieren von int zurück in von Menschen lesbare Binärdateien:

Sie können eine Ganzzahl an bin übergeben, um die Zeichenfolgendarstellung eines binären Literal anzuzeigen:

>>> bin(21)
'0b10101'

Und Sie können kombinierenbinundinthin und her gehen:

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

Sie können auch eine Formatspezifikation verwenden, wenn Sie eine Mindestbreite mit vorhergehenden Nullen haben möchten:

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

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

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

Wenn Sie nicht mit einer 0 beginnen, geht Python davon aus, dass die Zahl Basis 10 ist.

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

Soweit ich das beurteilen kann, unterstützt Python bis 2.5 nur hexadezimale und oktale Literale. Ich habe einige Diskussionen über das Hinzufügen von Binärdateien zu zukünftigen Versionen gefunden, aber nichts Bestimmtes.

Quelle
Translate

Ich bin mir ziemlich sicher, dass dies eines der Dinge ist, die sich in Python 3.0 mit vielleicht bin () ändern, um mit hex () und oct () zu gehen.

EDIT: Die Antwort von lbrandy ist in allen Fällen richtig.

Quelle