Jak se vyjádřil binární literály v Pythonu?

hlasů
303

Jak se vám vyjádřit celé číslo ve dvojkové soustavě s Python literals?

Byl jsem schopen snadno najít odpověď na hex:

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

a osmičkové:

>>> 01267
695
>>> 0100
64

Jak se používá literals vyjádřit binární v Pythonu?


Shrnutí odpovědí

  • Python 2.5 a starší: lze vyjádřit pomocí binární int('01010101111',2), ale ne s doslovný.
  • Python 2.5 a starší: neexistuje žádný způsob, jak vyjádřit binární literály.
  • Python 2.6 beta: Můžete to udělat tak jako: 0b1100111a 0B1100111.
  • Python 2.6 beta: také umožní 0o27nebo 0O27(druhý znak je písmeno O) představují osmičkové.
  • Python 3.0 beta: Stejné jako 2.6, ale již nebude umožňovat starší 027syntaxi octals.
Položena 04/08/2008 v 19:20
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
241

Pro REFERENČNÍ budoucí možnosti Python:
Od Python 2.6 můžete vyjádřit binární literály pomocí předponu 0b nebo 0B :

>>> 0b101111
47

Můžete také použít novou bin funkci získat binární reprezentaci čísla:

>>> bin(173)
'0b10101101'

Vývojovou verzi dokumentace: Co je nového v Pythonu 2.6

Odpovězeno 16/08/2008 v 13:35
zdroj uživatelem

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

Jiná cesta.

Odpovězeno 04/08/2008 v 19:34
zdroj uživatelem

hlasů
11

Jak se vyjádřil binární literály v Pythonu?

Nejsou to „binární“ literály, ale spíše „integer literály“. Můžete vyjádřit celočíselné literals s binární formát se 0po němž následuje Bnebo bnásledovala řada nul a jedniček, například:

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

Z Python 3 dokumenty , to jsou způsoby poskytování celočíselné literals Python:

Celé číslo Literály popsány následující lexikální definice:

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"

Neexistuje žádný limit pro délku celočíselné konstantě na rozdíl od toho, co lze uložit do volné paměti.

Všimněte si, že úvodní nuly v nenulovou počtu desetinné nejsou povoleny. To je pro disambiguace s C-stylu osmičkové literálu, které Python používané před verze 3.0.

Některé příklady celočíselné konstantě

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

Změněn ve verzi 3.6: Podtržítka jsou nyní povoleny pro seskupování účely v literály.

Jiné způsoby vyjádření binární:

Můžete mít nul a jedniček v objektu řetězec, který může být manipulován (i když měli byste asi jen to, bitové operace na celé číslo ve většině případů) - stačí projít int řetězci nul a jedniček a základnou kterou převádíte z (2 ):

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

Volitelně můžete mít 0bnebo 0Bprefix:

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

Pokud si to projít 0jako základ, bude předpokládat, základnu 10 v případě, že řetězec neurčuje s předponou:

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

Převod z int zpět do lidské čitelné binární:

Můžete předat číslo do zásobníku vidět řetězcovou reprezentaci binárního literálu:

>>> bin(21)
'0b10101'

A můžete kombinovat bina intjít tam a zpět:

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

Můžete použít specifikace formátu stejně, pokud chcete mít minimální šířku s předcházejících nul:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'
Odpovězeno 14/05/2016 v 11:58
zdroj uživatelem

hlasů
1

0 na začátku zde uvádí, že základna je 8 (ne 10), což je docela dobře vidět:

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

Pokud nechcete začít s 0, python předpokládá, že číslo je základ 10.

>>> int('10101', 0)
10101
Odpovězeno 21/06/2016 v 22:48
zdroj uživatelem

hlasů
-1

Jsem si docela jistý, že to je jedna z věcí, kvůli změně v Pythonu 3.0 se snad bin (), aby šel s hex () a října ().

EDIT: odpověď lbrandy je ve všech případech správná.

Odpovězeno 04/08/2008 v 19:27
zdroj uživatelem

hlasů
-1

Pokud je mi známo Python, a to až do 2.5, podporuje pouze hexadecimální a osmičkové literály. Udělal jsem najít nějaké diskuse o přidání binární na budoucí verze, ale nic definitivní.

Odpovězeno 04/08/2008 v 19:26
zdroj uživatelem

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