Penafian - Saya bukan ahli teori informasi, hanya monyet kode yang bekerja terutama di C dan C ++ (dan dengan demikian, dengan tipe lebar tetap), dan jawaban saya akan berasal dari perspektif tertentu.
Dibutuhkan rata-rata 3,2 bit untuk mewakili satu angka desimal tunggal - 0 hingga 7 dapat direpresentasikan dalam 3 bit, sedangkan 8 dan 9 membutuhkan 4. (8*3 + 2*4)/10 == 3.2
1 .
Ini kurang bermanfaat daripada kedengarannya. Untuk satu hal, Anda jelas tidak memiliki pecahan sedikit pun. Untuk yang lain, jika Anda menggunakan tipe integer asli (yaitu, bukan BCD atau BigInt), Anda tidak menyimpan nilai sebagai urutan angka desimal (atau setara binernya). Tipe 8 bit dapat menyimpan beberapa nilai yang membutuhkan hingga 3 digit desimal, tetapi Anda tidak dapat mewakili semua nilai 3-desimal dalam 8 bit - kisarannya adalah [0..255]
. Anda tidak dapat mewakili nilai [256..999]
hanya dalam 8 bit.
Ketika kita berbicara tentang nilai , kita akan menggunakan desimal jika aplikasi mengharapkannya (misalnya, aplikasi perbankan digital). Ketika kita berbicara tentang bit , kita biasanya akan menggunakan hex atau binary (saya hampir tidak pernah menggunakan oktal karena saya bekerja pada sistem yang menggunakan byte 8-bit dan kata-kata 32-bit, yang tidak dapat dibagi dengan 3).
Nilai yang dinyatakan dalam desimal tidak memetakan dengan bersih ke urutan biner. Ambil nilai desimal 255
. Setara biner dari setiap digit akan 010
, 101
, 101
. Namun, representasi biner dari nilainya 255
adalah 11111111
. Tidak ada korespondensi antara salah satu digit desimal dalam nilai dengan urutan biner. Tetapi ada korespondensi langsung dengan hex digit - F == 1111
, sehingga nilai tersebut dapat direpresentasikan seperti FF
dalam hex.
Jika Anda berada di sistem di mana 9-bit byte dan 36-bit kata adalah norma, maka oktal lebih masuk akal karena bit dikelompokkan secara alami menjadi bertiga.
- Sebenarnya, rata-rata per digit lebih kecil karena 0 dan 1 hanya memerlukan satu bit, sedangkan 2 dan 3 hanya membutuhkan 2 bit. Namun, dalam praktiknya, kami menganggap 0 hingga 7 untuk mengambil 3 bit. Hanya membuat hidup lebih mudah dalam banyak hal.
d
, mencakup satu angka desimal, kisaran0..9
.3*d
bit berarti tiga digit desimal dan memungkinkan Anda untuk mewakili bilangan bulat dari rentang0..999
. Sepuluh bit utuh (pikirkan biner sekarang) memberikan kisaran0..1023
. 999 cukup dekat dengan 1023, namun sedikit kurang. Jadi Anda mungkin berharapd
harus kurang dari 10/3.