Hoe kan jy binêre vasgekodeerde in Python uitdruk?
Vra
Hoe kan jy 'n heelgetal as 'n binêre getal met Python vasgekodeerde uitdruk?
Ek was maklik in staat om die antwoord vir hex vind:
>>> 0x12AF
4783
>>> 0x100
256
en oktale:
>>> 01267
695
>>> 0100
64
Hoe doen jy vasgekodeerde gebruik binêre uit te druk in Python?
Opsomming van antwoorde
- Python 2.5 en vroeër. Kan binêre uitdruk met behulp van
int('01010101111',2)
maar nie met 'n letterlike - Python 2.5 en vroeër: daar is geen manier om binêre vasgekodeerde druk .
- Python 2.6 beta: Jy kan dit doen soos so:.
0b1100111
of0B1100111
- Python 2.6 beta:. Sal ook toelaat dat
0o27
of0O27
(tweede karakter is die letter O) na 'n oktaal verteenwoordig - Python 3.0 beta: Dieselfde as 2.6, maar sal nie meer toelaat dat die ouer
027
sintaksis vir octals .
Oplossing
Vir verwysing- toekoms Python moontlikhede:
Begin met Python 2.6 kan jy binêre vasgekodeerde uitdruk met behulp van die voorvoegsel 0B of 0B :
>>> 0b101111
47
Jy kan ook die nuwe bin funksie gebruik om die binêre voorstelling van 'n nommer te kry:
>>> bin(173)
'0b10101101'
Ontwikkeling weergawe van die dokumentasie: Wat is nuut in Python 2.6
Ander wenke
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255
Nog 'n manier.
Hoe doen jy binêre vasgekodeerde in Python uitdruk?
Hulle is nie "binêre" vasgekodeerde, maar eerder, "heelgetal vasgekodeerde". Jy kan heelgetal vasgekodeerde uitdruk met 'n binêre formaat met 'n 0
gevolg deur 'n B
of b
gevolg deur 'n reeks van nulle en ene, byvoorbeeld:
>>> 0b0010101010
170
>>> 0B010101
21
Van die Python 3 docs , dit is die maniere van die verskaffing van heelgetal vasgekodeerde in Python:
Integer vasgekodeerde beskryf deur die volgende leksikale definisies:
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"
Daar is geen beperking vir die lengte van heelgetal vasgekodeerde afgesien van wat kan gestoor word in die beskikbare geheue.
Let daarop dat voorste nulle in 'n nie-nul desimale getal nie toegelaat nie. Dit is vir dubbelsinnigheidsbladsy met C-styl oktale vasgekodeerde, wat Python gebruik voor weergawe 3.0.
'n Paar voorbeelde van heelgetal vasgekodeerde:
7 2147483647 0o177 0b100110111 3 79228162514264337593543950336 0o377 0xdeadbeef 100_000_000_000 0b_1110_0101
verander in weergawe 3.6:. Under nou toegelaat vir groepering doeleindes in vasgekodeerde
Ander maniere van uitdrukking binêre:
Jy kan die nulle en ene in 'n string voorwerp wat gemanipuleer kan (alhoewel jy moet waarskynlik net doen bis bedrywighede op die getal in die meeste gevalle) het - net slaag int die string van nulle en ene en die basis wat jy omskakeling uit (2):
>>> int('010101', 2)
21
Jy kan opsioneel het die 0b
of 0B
voorvoegsel:
>>> int('0b0010101010', 2)
170
As jy slaag dit 0
as die basis, sal dit base 10 aanvaar as die string spesifiseer nie met 'n voorvoegsel:
>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21
omskakeling van int terug na leesbare binêre:
Jy kan 'n heelgetal slaag om bin om die string voorstelling van sien 'n binêre letterlike:
>>> bin(21)
'0b10101'
En jy kan bin
en int
kombineer om heen en weer te gaan:
>>> bin(int('010101', 2))
'0b10101'
Jy kan 'n formaat spesifikasie gebruik so goed, as jy wil minimum wydte van vorige nulle het:
>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'
0 in die begin hier bepaal dat die basis is 8 (nie 10), wat is redelik maklik om te sien:
>>> int('010101', 0)
4161
As jy nie begin met 'n 0, dan luislang aanvaar die getal basis 10.
>>> int('10101', 0)
10101
Sover ek Python, up deur 2.5 kan vertel, ondersteun net heksadesimale en oktale vasgekodeerde. Ek het 'n paar besprekings oor die byvoeging van binêre om toekomstige weergawes, maar niks definitiewe.
Ek is redelik seker dit is een van die dinge wat as gevolg van verandering in Python 3.0 met miskien bin () om te gaan met blok () en Oktober ().
EDIT: lbrandy se antwoord is korrek in alle gevalle.