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:
0b1100111
OF0b1100111
. - Python 2.6 Beta: Wordt ook toegestaan
0o27
of0o27
(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
027
syntax 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 0
gevolgd door een b
of b
gevolgd 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 0b
of 0b
voorvoegsel hebben:
>>> int('0b0010101010', 2)
170
Als u deze doorgeeft 0
als 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 bin
en int
combineren 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.