Bagaimana anda mengekspresikan integer sebagai bilangan biner dengan Python literal?
Saya dengan mudah dapat menemukan jawaban untuk hex:
>>> 0x12AF
4783
>>> 0x100
256
dan oktal:
>>> 01267
695
>>> 0100
64
* Bagaimana anda menggunakan literal untuk mengekspresikan biner di Python?**
Ringkasan Jawaban
int('01010101111',2)
tapi tidak dengan literal.0b1100111
atau 0B1100111
.0o27
atau 0O27
(karakter kedua adalah huruf O) untuk mewakili octal.027
sintaks untuk octals.Untuk referensi—masa depan Python kemungkinan: Mulai dengan Python 2.6 anda dapat mengekspresikan biner literal menggunakan awalan 0b atau 0B:
>>> 0b101111
47
Anda juga dapat menggunakan baru bin fungsi untuk mendapatkan representasi biner dari nomor:
>>> bin(173)
'0b10101101'
Pengembangan versi, dokumentasi: Apa's Baru di Python 2.6
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255
Cara yang lain.
Bagaimana anda mengekspresikan biner literal di Python?
Mereka'tidak "biner" literal, melainkan, "integer literals". Anda dapat mengekspresikan integer literals dengan format biner dengan 0
diikuti oleh B
atau b
diikuti oleh serangkaian angka-angka nol dan satu, misalnya:
>>> 0b0010101010
170
>>> 0B010101
21
Dari Python 3 docs, ini adalah cara-cara memberikan integer literals dalam Python:
Integer literals dijelaskan sebagai berikut leksikal definisi:
integer ::= decinteger | bininteger | octinteger | hexinteger decinteger ::= nonzerodigit ([""] digit)* | "0"+ ([""] "0")* bininteger ::= "0" ("b" | "B") ([""] bindigit)+ octinteger ::= "0" ("ya" | "Ya") ([""] octdigit)+ hexinteger ::= "0" ("x" | "X") (["_"] hexdigit)+ nonzerodigit ::= "1"..."9" digit ::= "0"..."9" bindigit ::= "0" | "1" octdigit ::= "0"..."7" hexdigit ::= digit | ""..."f" | ""..."F"
tidak Ada batasan untuk panjang integer literals terlepas dari apa yang dapat disimpan dalam memori yang tersedia.
Perhatikan bahwa nol terkemuka di non-nol angka desimal tidak diperbolehkan. Ini adalah untuk disambiguasi dengan C-gaya oktal literal, yang Python digunakan sebelum versi 3.0.
Beberapa contoh dari integer literals:
7 2147483647 0o177 0b100110111 3 79228162514264337593543950336 0o377 0xdeadbeef 100_000_000_000 0b_1110_0101 Berubah di versi 3.6: Menggarisbawahi kini diizinkan untuk pengelompokan tujuan dalam literal.
Anda dapat memiliki nol dan satu dalam serangkaian objek yang dapat dimanipulasi (meskipun anda mungkin hanya harus melakukan bitwise operasi pada bilangan bulat dalam kebanyakan kasus) - hanya lulus int string nol dan satu dan dasar anda mengkonversi dari (2):
>>> int('010101', 2)
21
Secara opsional, anda dapat memiliki 0
atau 0B
awalan:
>>> int('0b0010101010', 2)
170
Jika anda lulus 0
sebagai dasar, itu akan menganggap basis 10 jika string doesn't menentukan dengan awalan:
>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21
Anda dapat melewati sebuah integer ke bin untuk melihat representasi string biner literal:
>>> bin(21)
'0b10101'
Dan anda dapat menggabungkan bin
dan int
untuk pergi bolak-balik:
>>> bin(int('010101', 2))
'0b10101'
Anda dapat menggunakan format keterangan juga, jika anda ingin memiliki lebar minimum dengan sebelumnya nol:
>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'
Saya cukup yakin ini adalah salah satu hal yang disebabkan perubahan dalam Python 3.0 dengan mungkin (bin) untuk pergi dengan hex() dan oct().
EDIT: lbrandy's jawaban yang benar dalam semua kasus.