Meskipun tidak terlalu penting, string biner biasanya berarti string yang berisi data biner aktual (satu byte berisi dua digit heksadesimal, yaitu "\ x00" adalah byte nol).
trevorKirkby
Jawaban:
563
Anda menggunakan intfungsi bawaan, dan memberikannya basis nomor input, yaitu 2untuk nomor biner:
>>> int('11111111',2)255
Berikut adalah dokumentasi untuk python2 , dan untuk python3 .
Jika seseorang mencari yang sebaliknya: bin(255)-> '0b11111111'. Lihat jawaban ini untuk detail tambahan.
Akseli Palén
7
Perlu dicatat bahwa ini hanya berfungsi untuk bilangan bulat biner yang tidak ditandatangani. Untuk bilangan bulat yang ditandatangani, opsi konversi berantakan.
Nama Palsu
2
Bagaimana cara melakukannya di python 3?
Saras Arya
2
@SarasArya Sangat mirip! :) Saya memperbarui, lihat di atas.
bersantai
1
Dan perhatikan bahwa dalam sesi REPL interaktif (seperti yang disarankan oleh >>>prompt), Anda tidak perlu menggunakan printsama sekali. Contoh hipotesis OP tidak. Jadi itu harus benar-benar identik dengan Python 2 dan 3.
John Y
37
Ketikkan 0b11111111 di antarmuka interaktif python:
Cara lain untuk melakukan ini adalah dengan menggunakan bitstringmodul:
>>>from bitstring importBitArray>>> b =BitArray(bin='11111111')>>> b.uint
255
Perhatikan bahwa bilangan bulat yang tidak ditandatangani berbeda dari bilangan bulat yang ditandatangani:
>>> b.int
-1
The bitstringModul bukan keharusan, tetapi memiliki banyak metode performant untuk mengubah masukan ke dan dari bit menjadi bentuk lain, serta memanipulasi mereka.
Menggunakan int dengan basis adalah cara yang tepat untuk pergi. Saya dulu melakukan ini sebelum saya menemukan int juga mengambil basis. Ini pada dasarnya adalah pengurangan yang diterapkan pada pemahaman daftar tentang cara primitif mengubah biner menjadi desimal (mis. 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))])
Perhatikan 2 bagian informasi yang dipisahkan oleh titik dua.
Dengan cara ini, Anda dapat mengonversi antara {binary, octal, hexadecimal, desimal} menjadi {binary, octal, hexadecimal, desimal} dengan mengubah sisi kanan kolon [:]
:#b -> converts to binary
:#o -> converts to octal
:#x -> converts to hexadecimal
:#0-> converts to decimal as above example
Coba ubah sisi kiri kolon menjadi oktal / heksadesimal / desimal.
Untuk matriks besar (10 ** 5 baris ke atas) lebih baik menggunakan matmult vektor. Lewati semua baris dan cols dalam satu tembakan. Ini sangat cepat. Tidak ada perulangan di python di sini. Saya awalnya mendesainnya untuk mengubah banyak kolom biner seperti 0/1 untuk seperti 10 kolom genre yang berbeda di MovieLens menjadi satu integer untuk setiap baris contoh.
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
Jawaban:
Anda menggunakan
int
fungsi bawaan, dan memberikannya basis nomor input, yaitu2
untuk nomor biner:Berikut adalah dokumentasi untuk python2 , dan untuk python3 .
sumber
bin(255)
->'0b11111111'
. Lihat jawaban ini untuk detail tambahan.>>>
prompt), Anda tidak perlu menggunakanprint
sama sekali. Contoh hipotesis OP tidak. Jadi itu harus benar-benar identik dengan Python 2 dan 3.Ketikkan 0b11111111 di antarmuka interaktif python:
sumber
Cara lain untuk melakukan ini adalah dengan menggunakan
bitstring
modul:Perhatikan bahwa bilangan bulat yang tidak ditandatangani berbeda dari bilangan bulat yang ditandatangani:
The
bitstring
Modul bukan keharusan, tetapi memiliki banyak metode performant untuk mengubah masukan ke dan dari bit menjadi bentuk lain, serta memanipulasi mereka.sumber
Menggunakan int dengan basis adalah cara yang tepat untuk pergi. Saya dulu melakukan ini sebelum saya menemukan int juga mengambil basis. Ini pada dasarnya adalah pengurangan yang diterapkan pada pemahaman daftar tentang cara primitif mengubah biner menjadi desimal (mis. 110 = 2 ** 0 * 0 + 2 ** 1 * 1 + 2 ** 2 * 1)
sumber
add = lambda x, y: x + y
,int.__add__
bisa diberikan pengurangan. Misalnyareduce(int.__add__, ...)
sumber
Implementasi Python rekursif:
sumber
Biner ke desimal:
biner ke oktal hexa dan lain-lain
Perhatikan 2 bagian informasi yang dipisahkan oleh titik dua.
Dengan cara ini, Anda dapat mengonversi antara {binary, octal, hexadecimal, desimal} menjadi {binary, octal, hexadecimal, desimal} dengan mengubah sisi kanan kolon [:]
Coba ubah sisi kiri kolon menjadi oktal / heksadesimal / desimal.
sumber
Untuk matriks besar (10 ** 5 baris ke atas) lebih baik menggunakan matmult vektor. Lewati semua baris dan cols dalam satu tembakan. Ini sangat cepat. Tidak ada perulangan di python di sini. Saya awalnya mendesainnya untuk mengubah banyak kolom biner seperti 0/1 untuk seperti 10 kolom genre yang berbeda di MovieLens menjadi satu integer untuk setiap baris contoh.
sumber