Jak wyrażać literały binarne w Pythonie?
Jak wyrazić liczbę całkowitą jako liczbę binarną za pomocą literałów Pythona?
Łatwo znalazłem odpowiedź na hex:
>>> 0x12AF
4783
>>> 0x100
256
I ósemkowe:
>>> 01267
695
>>> 0100
64
Jak używać literałów do wyrażania binarnego w Pythonie?
podsumowanie odpowiedzi
- Python 2.5 i wcześniejsze: może wyrażać binarne za pomocą
int('01010101111',2)
, ale nie za pomocą literała. - Python 2.5 i wcześniejsze: nie ma nie ma możliwości wyrażenia binarnego literały.
- Python 2.6 beta: możesz zrobić tak:
0b1100111
lub0B1100111
. - Python 2.6 beta: pozwala również
0o27
lub0O27
(drugi znak to litera O) reprezentować ósemkę. - Python 3.0 beta: taki sam jak 2.6, ale nie będzie już zezwalał na starszą składnię
027
dla oktali.
6 answers
Dla odniesienia - przyszłość możliwości Pythona:
Począwszy od Pythona 2.6 możesz wyrażać literały binarne za pomocą prefiksu 0b lub 0b:
>>> 0b101111
47
Możesz również użyć nowej funkcji bin , aby uzyskać binarną reprezentację liczby:
>>> bin(173)
'0b10101101'
Wersja rozwojowa dokumentacji: Co nowego w Pythonie 2.6
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-16 12:35:36
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255
W inny sposób.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-22 17:47:30
Jak wyrażasz literały binarne w Pythonie?
Nie są literałami "binarnymi" , ale raczej "literałami całkowitymi". Literały całkowite można wyrazić w formacie binarnym za pomocą 0
, po którym następuje B
lub b
, po których następuje szereg zer i jedynek, na przykład:
>>> 0b0010101010
170
>>> 0B010101
21
W Pythonie 3 Docs , są to sposoby dostarczania literałów całkowitych w Pythonie:
Literały całkowite są opisane za pomocą następującej leksyki definicje:
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 limitu długości liter całkowitych poza tym, co może być przechowywany w dostępnej pamięci.
Zauważ, że początkowe zera w niezerowej liczbie dziesiętnej są niedozwolone. To jest do disambiguacji z literałami ósemkowymi w stylu C, które Python używany przed wersją 3.0.
Niektóre przykłady liter całkowitych:7 2147483647 0o177 0b100110111 3 79228162514264337593543950336 0o377 0xdeadbeef 100_000_000_000 0b_1110_0101
zmieniono w wersji 3.6: podkreślniki są teraz dozwolone dla celów grupowania w literały.
Inne sposoby wyrażania binarnego:
Możesz mieć zera i jedynki w obiekcie string, który można manipulować ( chociaż prawdopodobnie powinieneś wykonywać operacje bitowe na liczbie całkowitej w większości przypadków) - po prostu przekaż int ciąg zer i jedynek oraz bazę, z której konwertujesz (2):
>>> int('010101', 2)
21
Opcjonalnie możesz mieć prefiks 0b
lub 0B
:
>>> int('0b0010101010', 2)
170
Jeśli przekażesz ją 0
jako bazę, to przyjmie bazę 10, jeśli łańcuch nie określ za pomocą prefiksu:
>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21
Konwersja z int z powrotem do pliku binarnego czytelnego dla człowieka:
Możesz przekazać liczbę całkowitą do bin, aby zobaczyć reprezentację ciągu znaków literału binarnego:
>>> bin(21)
'0b10101'
I możesz połączyć bin
i int
, aby przejść tam iz powrotem:
>>> bin(int('010101', 2))
'0b10101'
Możesz również użyć specyfikacji formatu, jeśli chcesz mieć minimalną szerokość z poprzedzającymi zerami:
>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-13 15:22:33
0 Na początku tutaj określa, że baza jest 8 (nie 10), co jest dość łatwe do zobaczenia:
>>> int('010101', 0)
4161
Jeśli nie zaczniesz od 0, to python zakłada, że liczba jest bazą 10.
>>> int('10101', 0)
10101
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-21 22:48:20
Z tego co wiem Python, do 2.5 obsługuje tylko litery szesnastkowe i ósemkowe. Znalazłem kilka dyskusji na temat dodawania binarnych do przyszłych wersji, ale nic konkretnego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-04 18:26:13
Jestem prawie pewien, że jest to jedna z rzeczy, które należy zmienić w Pythonie 3.0 z bin (), aby przejść z hex () i oct ().
Edytuj: odpowiedź lbrandy ' ego jest prawidłowa we wszystkich przypadkach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-13 16:46:39