Chociaż tak naprawdę to nie ma znaczenia, ciąg binarny zwykle oznacza ciąg zawierający rzeczywiste dane binarne (bajt zawiera dwie cyfry szesnastkowe, tzn. „\ X00” to bajt zerowy).
trevorKirkby
Odpowiedzi:
563
Korzystasz z wbudowanej intfunkcji i przekazujesz jej podstawę liczby wejściowej, tj. 2Liczby binarnej:
W przypadku, gdy ktoś szuka czegoś przeciwnego: bin(255)-> '0b11111111'. Zobacz tę odpowiedź, aby uzyskać dodatkowe informacje.
Akseli Palén
7
Należy zauważyć, że działa to tylko w przypadku binarnych liczb całkowitych bez znaku. W przypadku liczb całkowitych ze znakiem opcje konwersji są bałaganem.
Fałszywe imię
2
Jak to zrobić w Pythonie 3?
Saras Arya
2
@SarasArya Jest bardzo podobny! :) Zaktualizowałem, patrz wyżej.
odpręż się
1
I pamiętaj, że w interaktywnej sesji REPL (zgodnie z sugestią >>>) nie musisz jej wcale używać print. Hipotetyczny przykład OP nie. Więc tak naprawdę powinno być identycznie w Pythonie 2 i 3.
John Y
37
Po prostu wpisz 0b11111111 w interaktywnym interfejsie Pythona:
Używanie int z bazą jest właściwą drogą. Robiłem to, zanim odkryłem, że int bierze również bazę. Zasadniczo jest to redukcja zastosowana do zrozumienia listy pierwotnego sposobu konwersji binarnej na dziesiętną (np. 110 = 2 ** 0 * 0 + 2 ** 1 * 1 + 2 ** 2 * 1)
add =lambda x,y : x + y
reduce(add,[int(x)*2** y for x, y in zip(list(binstr), range(len(binstr)-1,-1,-1))])
Zwróć uwagę na 2 informacje oddzielone dwukropkiem.
W ten sposób możesz konwertować między {binarny, ósemkowy, szesnastkowy, dziesiętny} na {binarny, ósemkowy, szesnastkowy, dziesiętny}, zmieniając prawą stronę dwukropka [:]
:#b -> converts to binary
:#o -> converts to octal
:#x -> converts to hexadecimal
:#0-> converts to decimal as above example
Spróbuj zmienić lewą stronę jelita grubego na ósemkową / szesnastkową / dziesiętną.
W przypadku dużej matrycy (10 ** 5 rzędów i więcej) lepiej jest użyć wektoryzowanego matmulta. Podaj we wszystkich rzędach i kolkach jednym strzałem. To jest bardzo szybkie. W Pythonie nie ma pętli. Pierwotnie zaprojektowałem go do konwertowania wielu kolumn binarnych, takich jak 0/1, na 10 kolumn gatunku w MovieLens na jedną liczbę całkowitą dla każdego przykładowego wiersza.
defBitsToIntAFast(bits):
m,n = bits.shape
a =2**np.arange(n)[::-1]# -1 reverses array of powers of 2 of same length as bitsreturn bits @ a
Odpowiedzi:
Korzystasz z wbudowanej
int
funkcji i przekazujesz jej podstawę liczby wejściowej, tj.2
Liczby binarnej:Oto dokumentacja dla python2 i python3 .
źródło
bin(255)
->'0b11111111'
. Zobacz tę odpowiedź, aby uzyskać dodatkowe informacje.>>>
) nie musisz jej wcale używaćprint
. Hipotetyczny przykład OP nie. Więc tak naprawdę powinno być identycznie w Pythonie 2 i 3.Po prostu wpisz 0b11111111 w interaktywnym interfejsie Pythona:
źródło
Innym sposobem na to jest użycie
bitstring
modułu:Zauważ, że liczba całkowita bez znaku różni się od liczby całkowitej ze znakiem:
bitstring
Moduł nie jest wymogiem, ale ma wiele wydajnych metod odwracając wejście do iz bitów w innych formach, a także manipulowania nimi.źródło
Używanie int z bazą jest właściwą drogą. Robiłem to, zanim odkryłem, że int bierze również bazę. Zasadniczo jest to redukcja zastosowana do zrozumienia listy pierwotnego sposobu konwersji binarnej na dziesiętną (np. 110 = 2 ** 0 * 0 + 2 ** 1 * 1 + 2 ** 2 * 1)
źródło
add = lambda x, y: x + y
,int.__add__
można podać redukcję. Egreduce(int.__add__, ...)
źródło
Rekurencyjna implementacja Pythona:
źródło
Binarny na dziesiętny:
binarny na ósemkowy hexa itp.
Zwróć uwagę na 2 informacje oddzielone dwukropkiem.
W ten sposób możesz konwertować między {binarny, ósemkowy, szesnastkowy, dziesiętny} na {binarny, ósemkowy, szesnastkowy, dziesiętny}, zmieniając prawą stronę dwukropka [:]
Spróbuj zmienić lewą stronę jelita grubego na ósemkową / szesnastkową / dziesiętną.
źródło
W przypadku dużej matrycy (10 ** 5 rzędów i więcej) lepiej jest użyć wektoryzowanego matmulta. Podaj we wszystkich rzędach i kolkach jednym strzałem. To jest bardzo szybkie. W Pythonie nie ma pętli. Pierwotnie zaprojektowałem go do konwertowania wielu kolumn binarnych, takich jak 0/1, na 10 kolumn gatunku w MovieLens na jedną liczbę całkowitą dla każdego przykładowego wiersza.
źródło