Hoe verbied je binaire literalen in Python?

Hoe drukt u een geheel getal uit als een binair getal met Python Literals?

Ik was gemakkelijk in staat om het antwoord voor HEX te vinden:

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

en octaal:

>>> 01267
695
>>> 0100
64

Hoe gebruik je literals om binair uit te drukken in Python?


Samenvatting van de antwoorden

  • Python 2.5 en eerder: kan binair maken met behulp van int('01010101111',2)maar niet met een letterlijke.
  • Python 2.5 en eerder: er is op geen enkele manier om binaire literaten uit te drukken.
  • Python 2.6 Beta: U kunt het doen van SO: 0b1100111OF 0b1100111.
  • Python 2.6 Beta: Wordt ook toegestaan ​​0o27of 0o27(tweede teken is de letter o) om een ​​octaal te vertegenwoordigen.
  • Python 3.0 Beta: hetzelfde als 2.6, maar staat niet langer de oudere 027syntax voor octals toe.

Antwoord 1, Autoriteit 100%

Voor referentie- toekomst pythonmogelijkheden:
Beginnend met Python 2.6 U kunt binaire literalen uitdrukken met behulp van het Prefix 0B of 0B :

>>> 0b101111
47

U kunt ook de nieuwe Bin -functie gebruiken om de binaire weergave van een nummer te krijgen:

>>> bin(173)
'0b10101101'

Ontwikkelingsversie van de documentatie: Wat is er nieuw in Python 2.6


Antwoord 2, autoriteit 24%

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

Een andere manier.


Antwoord 3, autoriteit 10%

Hoe druk je binaire literalen uit in Python?

Het zijn geen ‘binaire’ letterlijke, maar eerder ‘gehele letterlijke’. U kunt letterlijke gehele getallen uitdrukken met een binair formaat met een 0gevolgd door een bof bgevolgd door een reeks nullen en enen, bijvoorbeeld :

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

Van de Python 3 docszijn dit de manieren van het verstrekken van letterlijke gehele getallen in Python:

Integer letterlijke woorden worden beschreven door de volgende lexicale definities:

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"

Er is geen limiet voor de lengte van letterlijke gehele getallen, behalve wat
kan worden opgeslagen in het beschikbare geheugen.

Merk op dat leidende nullen in een niet-nul-decimaal nummer niet zijn toegestaan.
Dit is voor disambiguering met Octal Literals in C-Style, die Python
gebruikt vóór versie 3.0.

Enkele voorbeelden van integer-literaten:

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

Gewijzigd in versie 3.6: Underscores zijn nu toegestaan ​​voor groepelijke doeleinden in literals.

Andere manieren om binair uit te drukken:

U kunt de nullen en degenen hebben in een stringobject dat kan worden gemanipuleerd (hoewel u waarschijnlijk gewoon een bitgewise moet doen op het gehele getal) – Gewoon doorgeven in de reeks nullen en degenen en de basis die u converteert van (2):

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

U kunt optioneel de 0bof 0bvoorvoegsel hebben:

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

Als u deze doorgeeft 0als basis, neemt het BASE 10 aan als de string niet opgeeft met een voorvoegsel:

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

Converteren van intrug naar menselijk leesbaar binair:

U kunt een geheel getal doorgeven aan bak om de tekenreeksweergave van een binaire letterlijke:

te zien

>>> bin(21)
'0b10101'

en u kunt binen intcombineren om heen en weer te gaan:

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

U kunt ook een formaatspecificatie gebruiken als u een minimale breedte wilt hebben met voorafgaande nullen:

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

Antwoord 4

0 in het begin hier geeft aan dat de basis 8 is (niet 10), wat vrij gemakkelijk te zien is:

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

Als je niet met een 0 begint, gaat python ervan uit dat het getal grondtal 10 is.

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

Antwoord 5

Een andere goede methode om een geheel getal uit binair getal te halen, is door eval() te gebruiken

Vind ik leuk:

def getInt(binNum = 0):
    return eval(eval('0b' + str(n)))

Ik denk dat dit ook een manier is om het te doen.
Ik hoop dat dit een bevredigend antwoord is 😀


Antwoord 6

Ik heb dit geprobeerd in Python 3.6.9

Binair naar decimaal converteren

>>> 0b101111
47
>>> int('101111',2)
47

Decimaal converteren naar binair

>>> bin(47)
'0b101111'

Plaats een 0 als tweede parameter python neemt aan dat het decimaal is.

>>> int('101111',0)
101111

Antwoord 7

Voor zover ik weet, ondersteunt Python, tot en met 2.5, alleen hexadecimale & octale letterlijke. Ik heb wel wat discussies gevonden over het toevoegen van binair aan toekomstige versies, maar niets definitiefs.


Antwoord 8

Ik ben er vrij zeker van dat dit een van de dingen is die te wijten is aan een verandering in Python 3.0 met misschien bin() voor hex() en oct().

BEWERKEN:
lbrandy’s antwoord is in alle gevallen correct.

Other episodes