Bagaimana anda mengekspresikan biner literal di Python?

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

  • Python 2.5 dan sebelumnya: dapat mengekspresikan biner menggunakan int('01010101111',2) tapi tidak dengan literal.
  • Python 2.5 dan sebelumnya: tidak ada cara untuk mengekspresikan biner literal.
  • Python 2.6 beta: Anda dapat melakukannya seperti ini: 0b1100111 atau 0B1100111.
  • Python 2.6 beta: juga memungkinkan 0o27 atau 0O27 (karakter kedua adalah huruf O) untuk mewakili octal.
  • Python 3.0 beta: Sama seperti 2.6, tapi tidak akan lagi mengizinkan tua 027 sintaks untuk octals.
Larutan

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

Komentar (0)
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

Cara yang lain.

Komentar (1)

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.

Cara lain untuk mengekspresikan biner:

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

Mengkonversi dari int kembali untuk dibaca manusia biner:

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'
Komentar (0)

0 di mulai dari sini menunjukkan bahwa basis 8 (10), yang cukup mudah untuk melihat:

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

Jika anda don't mulai dengan 0, maka python mengasumsikan jumlah adalah basis 10.

>>> int('10101', 0)
10101
Komentar (0)

Sejauh yang saya dapat memberitahu Python, melalui 2.5, hanya mendukung heksadesimal & oktal literal. Aku menemukan beberapa diskusi tentang menambahkan biner untuk versi masa depan tapi tidak ada yang pasti.

Komentar (0)

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.

Komentar (0)