Wie Sie binäre Literale in Python ausdrücken?

stimmen
303

Wie Sie eine ganze Zahl als eine binäre Zahl mit Python Literale ausdrücken?

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

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

und Oktal:

>>> 01267
695
>>> 0100
64

Wie verwenden Sie Literale in Python binär auszudrücken?


Zusammenfassung der Antworten

  • Python 2.5 und früher: ausdrücken kann binär mit , int('01010101111',2)aber nicht mit einem wörtlichen.
  • Python 2.5 und früher: Es gibt keine Möglichkeit , binäre Literale auszudrücken.
  • Python 2.6 beta: Sie können wie so tun: 0b1100111oder 0B1100111.
  • Python 2.6 beta: wird auch ermöglichen 0o27oder 0O27(zweites Zeichen ist der Buchstabe O) ein Oktal darzustellen.
  • Python 3.0 beta: Wie 2.6, aber nicht mehr die ältere erlauben 027Syntax für octals.
Veröffentlicht am 04/08/2008 um 19:20
quelle vom benutzer
In anderen Sprachen...                            


6 antworten

stimmen
241

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

>>> 0b101111
47

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

>>> bin(173)
'0b10101101'

Entwicklungsversion der Dokumentation: Was ist neu in Python 2.6

Beantwortet am 16/08/2008 um 13:35
quelle vom benutzer

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

Ein anderer Weg.

Beantwortet am 04/08/2008 um 19:34
quelle vom benutzer

stimmen
11

Wie Sie binäre Literale in Python ausdrücken?

Sie sind nicht „binäre“ Literale, sondern „Ganzzahlliterale“. Sie können Ganzzahlliterale mit einem binären Format mit einem Ausdruck bringen , 0gefolgt von einem Boder bgefolgt von einer Reihe von Nullen und Einsen, zum Beispiel:

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

Aus der 3 Python - Dokumentation , das sind die Möglichkeiten der Bereitstellung Ganzzahlliterale in Python:

Ganzzahlliterale 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 der Ganzzahlliterale abgesehen von dem, was in der verfügbaren Speicher gespeichert werden.

Beachten Sie, dass führende Nullen in einer Nicht-Null-Dezimalzahl sind nicht erlaubt. Dies ist für Begriffsklärung mit C-Stil Oktal-Literale, dem Python vor der Version 3.0 verwendete.

Einige Beispiele für Ganzzahlliterale:

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

Geändert in Version 3.6: Unterstreichungen werden nun für Zwecke der Eingruppierung in Literale erlaubt.

Andere Möglichkeiten der binären ausdrücken:

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

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

Sie können die optional haben 0boder 0BPräfix:

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

Wenn Sie es passieren 0als Basis, wird es Basis 10 übernehmen , wenn die Zeichenfolge nicht mit einem Präfix spezifiziert:

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

Umwandlung von int zurück zu den Menschen lesbaren binär:

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

>>> bin(21)
'0b10101'

Und Sie können kombinieren binund intzu hin und her gehen:

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

Sie können auch eine Formatspezifikation verwenden, wenn Sie minimale Breite mit führenden Nullen haben wollen:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'
Beantwortet am 14/05/2016 um 11:58
quelle vom benutzer

stimmen
1

hier 0 im Start gibt an, dass die Basis 8 (nicht 10), was ziemlich leicht zu sehen:

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

Wenn Sie nicht mit einem 0 beginnen, nimmt dann Python die Zahlenbasis ist 10.

>>> int('10101', 0)
10101
Beantwortet am 21/06/2016 um 22:48
quelle vom benutzer

stimmen
-1

Ich bin mir ziemlich sicher, dass dies eines der Dinge, zurückzuführen ist in Python 3.0 mit vielleicht ist () ändern mit hex zu gehen () und Oktober ().

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

Beantwortet am 04/08/2008 um 19:27
quelle vom benutzer

stimmen
-1

Soweit ich Python sagen kann, nach oben durch 2.5, unterstützt nur hexadezimal & Oktal Literale. Ich habe einige Diskussionen über das Hinzufügen von binären zu zukünftigen Versionen aber nichts Bestimmtes finden.

Beantwortet am 04/08/2008 um 19:26
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more