Hvordan uttrykker du binære litteraler i Python?

stemmer
308

Hvordan uttrykker du et tall som et binært tall med Python konstanter?

Jeg var lett kunne finne svaret for hex:

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

og oktale:

>>> 01267
695
>>> 0100
64

Hvordan bruker du litteraler å uttrykke binær i Python?


Oppsummering av svar

  • Python 2.5 og tidligere: kan uttrykke binær hjelp int('01010101111',2), men ikke med en bokstavelig.
  • Python 2.5 og tidligere: det er ingen måte å uttrykke binære litteraler.
  • Python 2.6 beta: Du kan gjøre slik: 0b1100111eller 0B1100111.
  • Python 2.6 beta: Det vil også tillate 0o27eller 0O27(andre tegn er bokstaven O) for å representere en oktal.
  • Python 3.0 beta: Samme som 2.6, men vil ikke lenger tillate at eldre 027syntaks for octals.
Publisert på 04/08/2008 klokken 18:20
kilden bruker
På andre språk...                            


6 svar

stemmer
244

For referanse- fremtiden Python muligheter:
Fra og med Python 2.6 kan du uttrykke binære litteraler bruker prefikset 0b eller 0B :

>>> 0b101111
47

Du kan også bruke den nye bin -funksjonen for å få den binære representasjonen av et tall:

>>> bin(173)
'0b10101101'

Utvikling versjon av dokumentasjon: Hva er nytt i Python 2.6

Svarte 16/08/2008 kl. 12:35
kilden bruker

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

Annen vei.

Svarte 04/08/2008 kl. 18:34
kilden bruker

stemmer
13

Hvordan uttrykker du binære litteraler i Python?

De er ikke "binære" konstanter, men snarere "heltall litteraler". Du kan uttrykke heltall litteraler med et binært format med en 0etterfulgt av en Beller betterfulgt av en serie av nuller og enere, for eksempel:

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

Fra Python 3 dokumenter , er det disse måter å gi heltallige konstanter i Python:

Integer literrives ved følgende leksikalske definisjoner:

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"

Det er ingen grense for lengden av heltallige konstanter bortsett fra det som kan lagres i det tilgjengelige minnet.

Merk at ledende nuller i en ikke-null desimaltall er ikke tillatt. Dette er for disambiguation med C-stil oktale konstanter, som Python brukt før versjon 3.0.

Noen eksempler på heltallige konstanter:

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

Endret i versjon 3.6: Fremhever er nå tillatt for gruppering formål i litteraler.

Andre måter å uttrykke binær:

Du kan ha nuller og enere i en streng objekt som kan manipuleres (selv om du bør nok bare gjøre bitvis operasjoner på heltall i de fleste tilfeller) - bare pass int streng av nuller og enere og basen du konverterer fra (2 ):

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

Du kan eventuelt ha 0beller 0Bprefiks:

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

Hvis du passerer den 0som base, vil det anta basen 10 hvis strengen ikke spesifiserer med et prefiks:

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

Konvertering fra int tilbake til lesbar binær:

Du kan sende et tall til bin å se strengrepresentasjon av et binært bokstavelig:

>>> bin(21)
'0b10101'

Og du kan kombinere binog intå gå frem og tilbake:

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

Du kan bruke en spesifikasjon format også, hvis du vil ha minimum bredde med ledende nuller:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'
Svarte 14/05/2016 kl. 11:58
kilden bruker

stemmer
1

0 i starten her presiserer at basen er 8 (ikke 10), som er ganske lett å se:

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

Hvis du ikke starter med en 0, så python foruts nummeret er basen 10.

>>> int('10101', 0)
10101
Svarte 21/06/2016 kl. 22:48
kilden bruker

stemmer
-1

Jeg er ganske sikker på at dette er en av de tingene som følge av endringer i Python 3.0 med kanskje bin () for å gå med hex () og oktober ().

EDIT: lbrandy svar er riktig i alle tilfeller.

Svarte 04/08/2008 kl. 18:27
kilden bruker

stemmer
-1

Så vidt jeg kan fortelle Python, opp gjennom 2,5, støtter kun heksadesimale og oktale litteraler. Jeg fant noen diskusjoner om å legge binære til fremtidige versjoner, men ingenting bestemt.

Svarte 04/08/2008 kl. 18:26
kilden bruker

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