Jak można wyrazić binarne literały w Pythonie?

głosy
303

Jak można wyrazić liczbą całkowitą jako liczbę dwójkową z literały Python?

I był w stanie łatwo znaleźć odpowiedź na hex:

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

i ósemkowy:

>>> 01267
695
>>> 0100
64

Jak używać literały wyrazić binarnego w Pythonie?


Podsumowanie odpowiedzi

  • Pyton 2,5 i wcześniej: można wyrazić za pomocą binarnej int('01010101111',2), ale nie z dosłownym.
  • Python 2.5 i wcześniejsze: nie ma żadnego sposobu , aby wyrazić literały binarnych.
  • Python 2.6 beta: Można zrobić tak: 0b1100111lub 0B1100111.
  • Python 2.6 beta: pozwoli 0o27lub 0O27(drugi znak to litera O) do reprezentowania ósemkowy.
  • Python 3.0 beta: Tak samo jak 2.6, ale nie będzie już pozwolić starszą 027składnię octals.
Utwórz 04/08/2008 o 19:20
źródło użytkownik
W innych językach...                            


6 odpowiedzi

głosy
-1

O ile mogę powiedzieć, Python, aż przez 2,5, obsługuje tylko szesnastkowe i ósemkowe literałów. Zrobiłem znaleźć dyskusje na temat dodawania binarnego do przyszłych wersji, ale nic konkretnego.

Odpowiedział 04/08/2008 o 19:26
źródło użytkownik

głosy
-1

Jestem całkiem pewny, że jest to jedna z rzeczy, z powodu zmian w Pythonie 3.0 z być może kosza (), aby przejść z hex () i październiku ().

EDIT: Odpowiedź lbrandy jest prawidłowe we wszystkich przypadkach.

Odpowiedział 04/08/2008 o 19:27
źródło użytkownik

głosy
64
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

Inny sposób.

Odpowiedział 04/08/2008 o 19:34
źródło użytkownik

głosy
241

Dla reference- przyszłe możliwości Pythona:
Począwszy Pythonie 2.6 możesz wyrazić binarne literały używając przedrostka 0b lub 0B :

>>> 0b101111
47

Można również korzystać z nowego bin funkcję, aby uzyskać binarną reprezentację liczby:

>>> bin(173)
'0b10101101'

Wersja Opracowanie dokumentacji: Co nowego w Pythonie 2.6

Odpowiedział 16/08/2008 o 13:35
źródło użytkownik

głosy
11

Jak można wyrazić binarne literały w Pythonie?

Oni nie „binarne literały”, ale raczej „literały całkowite”. Można wyrazić literały całkowite w formacie binarnym z 0zastosowaną przez Blub bpo serii zer i jedynek, na przykład:

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

Z Python 3 docs , są to sposoby udzielania literały całkowite w Pythonie:

Całkowitymi literałami są opisane w następujących definicji słownikowych:

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"

Nie ma ograniczeń co do długości całkowitych literałów oprócz tego, co może być przechowywany w dostępnej pamięci.

Zauważ, że zer wiodących w niezerową liczbę dziesiętną nie są dozwolone. To jest dla dezambiguacji z C-stylu literały ósemkowe, które Python stosowanych przed wersją 3.0.

Niektóre przykłady literałach całkowitą:

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

Zmieniono w wersji 3.6: podkreślenia są obecnie dopuszczone do celów grupowania w literałów.

Inne sposoby wyrażania binarne:

Możesz mieć zer i jedynek w obiekcie strun, które mogą być manipulowane (choć powinieneś po prostu zrobić operacje bitowe na całkowitą w większości przypadków) - po prostu przekazać int ciąg zer i jedynek i podstawą jesteś konwersji z (2 ):

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

Opcjonalnie można mieć 0blub 0Bprefiks:

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

Jeśli przekazać go 0jako bazy, to zakładamy bazę 10 Jeśli łańcuch nie określa z przedrostkiem:

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

Konwersja z int powrotem do czytelnej binarnym:

Można przekazać liczbę całkowitą do kosza, aby zobaczyć reprezentację ciąg binarny dosłownym:

>>> bin(21)
'0b10101'

I można połączyć bini intprzejść tam iz powrotem:

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

Można użyć specyfikację formatu, jak również, jeśli chcesz mieć minimalną szerokość z poprzednich zer:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'
Odpowiedział 14/05/2016 o 11:58
źródło użytkownik

głosy
1

0 na początku tutaj określa, że ​​baza jest 8 (nie 10), który jest dość łatwo zobaczyć:

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

Jeśli nie zacząć od 0, to pyton zakłada, że ​​liczba ta jest podstawa 10.

>>> int('10101', 0)
10101
Odpowiedział 21/06/2016 o 22:48
źródło użytkownik

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