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 of 0B1100111
  • Python 2.6 beta:. Sal ook toelaat dat 0o27 of 0O27 (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
  • .
Was dit nuttig?

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.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top