Saya akan mengajar sekelompok kecil orang tentang sistem penomoran dalam komputasi dan bertanya-tanya berapa banyak bit per digit yang ada dalam sistem desimal, misalnya:
- Hex (basis 16) - 4 bit
- Oktal (basis 8) - 3 bit
- Biner (basis 2) - 1 bit
- Desimal (basis 10) -?
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.Jawaban:
Apa yang Anda cari adalah logaritma berbasis 2 dari 10, yang merupakan bilangan irasional sekitar 3.32192809489 ....
Fakta bahwa Anda tidak dapat menggunakan jumlah integer bit untuk digit desimal adalah penyebab utama mengapa banyak fraksi yang mudah diekspresikan dalam sistem desimal (mis. 1/5 atau 0.2), tidak mungkin (tidak sulit: benar-benar mustahil) untuk diekspresikan dalam biner. Ini penting ketika mengevaluasi kesalahan pembulatan dalam aritmatika floating point.
sumber
Dengan kata lain, berapa jumlah informasi yang terkandung dalam satu digit dalam sistem ini.
Untuk basis 2, basis 4, basis 8, basis 16 dan basis 2 N lainnya jawabannya jelas karena dalam basis 2 N setiap digit dapat diekspresikan dengan tepat digit N.
Bagaimana Anda mendapatkan N diberikan 2 N ? Nah, Anda menggunakan logaritma berbasis 2, yang merupakan kebalikan dari eksponensial.
Logaritma angka-angka berbasis-K yang bukan kekuatan K bukanlah angka-angka utama. Khususnya:
Jumlah ini mungkin terlihat membingungkan, tetapi sebenarnya memiliki beberapa kegunaan. Misalnya, ini adalah entropi dari satu digit desimal.
Untuk kasus Anda, saya pikir nilai ini tidak ada gunanya. @ Jawaban Christian sangat membantu dalam menjelaskan alasannya.
sumber
Tentang masalah bit:
Saya minta maaf untuk mengatakan pertanyaan itu salah arah. Anda tidak akan menggunakan bit dengan cara itu. Bit adalah digit biner . Anda dapat mengonversi angka desimal 10, menjadi biner 1010 (8 + 2), jadi Anda perlu 4 bit untuk mengekspresikan nilai desimal 10.
Kekuatan 2
Anda telah jatuh ke dalam sedikit jebakan, dengan menggunakan biner (2), oktal (8) dan heksadesimal (16) sebagai contoh, karena ini semua adalah kekuatan 2, dan dengan demikian Anda dapat memikirkan mereka dalam hal bit, sedangkan 10 bukan kekuatan 2, jadi itu tidak berfungsi dengan baik seperti itu.
sumber
BCD - Binary Coded Decimal menggunakan 4 bit per digit, sama dengan Hexadecimal.
https://en.wikipedia.org/wiki/Binary-coded_decimal
sumber
Menggunakan bit menyiratkan kekuatan 2, dengan demikian, seperti yang orang lain katakan Anda tidak dapat dengan mudah menggerus 10 bit menjadi byte tanpa pemborosan. Solusi umum adalah menggunakan 4 bit sesuai heksadesimal dan menyia-nyiakan 6 status yang direpresentasikan sebagai AF. Yang menarik adalah melakukan matematika desimal dengan ini - itu tidak rapi dan sederhana.
Gagasan mengajar yang bermanfaat mungkin untuk membandingkan bagaimana Micky Mouse mungkin mengembangkan sistem penghitungan, karena ia hanya memiliki 4 jari per tangan - yang secara alami mengarah ke sistem berbasis oktal.
sumber
Ini mungkin penyederhanaan yang berlebihan tetapi tergantung pada pertanyaan yang Anda tanyakan.
(dan jawabannya pada dasarnya oktal atau hex)
Saya juga tidak menganggap bit fraksional sebagai bit karena dalam bit penggunaan praktis tidak memiliki fraksi.
T1: Berapa banyak bit yang dapat Anda wakili dalam angka desimal ?
A1: Anda dapat mewakili 3 bit informasi dalam satu digit desimal:
Skema yang paling umum adalah biner lurus dengan pembungkus di mana 0 = 8 = 000 dan 1 = 9 = 001. Tetapi Anda dapat menggunakan skema apa pun tidak ada yang mengatakan ini adalah satu-satunya cara untuk menyandikan bit ke dalam angka desimal.
atau
T2: Berapa banyak bit yang dibutuhkan untuk mewakili angka desimal?
A2: Anda membutuhkan setidaknya 4 bit untuk mewakili semua angka desimal. Dengan sedikit limbah atau pembungkus.
Sekali lagi skema yang paling umum adalah biner lurus dengan pembungkus tetapi Anda bisa menggunakan skema lain.
sumber
Di basis 1024, setiap simbol adalah 10 bit. Tiga digit desimal memiliki jumlah informasi yang sama dengan satu digit pada basis 1000, yang sedikit kurang dari 1024. Oleh karena itu, angka desimal memiliki sedikit kurang dari 10/3 bit. Perkiraan ini menghasilkan 3.333333 ..., sedangkan angka pastinya adalah 3.321928 ...
sumber
2 10 = 1.024
10 3 = 1.000
2 20 = 1.048.576
10 6 = 1.000.000
3 digit pada basis 10 hingga 999 dapat disimpan dalam 10 bit pada basis 2.
6 digit pada basis 10 hingga 999.999 dapat disimpan dalam 20 bit pada basis 2.
Ini adalah ide kilobyte, megabita, dan gigabita berasal.
sumber
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 akan010
,101
,101
. Namun, representasi biner dari nilainya255
adalah11111111
. 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 sepertiFF
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.
sumber
1001001
harus91
atau tidak49
.1001001
peta ke73
(64 + 8 + 1
). Saya tidak menafsirkannya sebagai urutan angka desimal berkode biner. Jika itu seharusnya BCD, yang harus menggunakan 4 bit per digit, maka kita harus mengasumsikan0
bit terkemuka , jadi itu harus49
.3.2
angka yang Anda dapatkan sebenarnya melanggar batasan teori informasilog(10)/log(2)
.Jika saya mengajarkan ini, pertama saya akan menjelaskan apa arti angka (dinyatakan sebagai serangkaian angka). yaitu, dari kanan ke kiri, dengan asumsi basis n, a * n ^ 0 + b * n ^ 1 + c * n ^ 2 ... z * n ^ y.
Kemudian jelaskan bahwa 10 ^ 3 kira-kira sama dengan 2 ^ 10. Ini tidak tepat dan merupakan alasan di komputer, kita sering tidak tahu apa arti sebenarnya 2k (apakah 2.000 atau 2.048?) Berfungsi dengan cukup baik untuk perkiraan cepat. 2 ^ 16 adalah sekitar 2 ^ (16 - 10) * 1.000, atau 2 ^ 6 (64) * 1.000 atau 64.000. Pada kenyataannya, itu adalah 65.536, tetapi jika Anda tidak keberatan sekitar satu persen, itu bekerja cukup baik untuk perkiraan cepat.
sumber