Berapa bit per digit dalam sistem desimal [tertutup]


28

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) -?

7
Intuisi: Katakanlah apa yang Anda cari d, mencakup satu angka desimal, kisaran 0..9. 3*dbit berarti tiga digit desimal dan memungkinkan Anda untuk mewakili bilangan bulat dari rentang 0..999. Sepuluh bit utuh (pikirkan biner sekarang) memberikan kisaran 0..1023. 999 cukup dekat dengan 1023, namun sedikit kurang. Jadi Anda mungkin berharap dharus kurang dari 10/3.
Kamil Maciorowski

5
Posting ini sepertinya lebih pas di Stack Overflow daripada di Super User.
gmarmstrong

21
@ gmarmstrong: Saya akan berdebat Mathematics.SE (atau mungkin SoftwareEngineering.SE). Ini tidak berhubungan langsung dengan masalah pemrograman.
Flater

10
@Flater: Matematika jelas merupakan tempat yang tepat, karena ini pada dasarnya adalah teori informasi 101.
MechMK1

7
Tidak ada rasa malu karena tidak mengetahui hal ini, tetapi orang yang tidak mungkin bukan orang terbaik untuk mengajar sistem angka.
WGroleau

Jawaban:


96

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.


Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
DavidPostill

20

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.

  • log 2 2 = 1 (1 bit per digit pada basis 2)
  • log 2 4 = 2 (2 bit per digit pada basis 4)
  • log 2 8 = 3 (3 bit per digit pada basis 8)
  • log 2 16 = 4 (4 bit per digit pada basis 16)

Logaritma angka-angka berbasis-K yang bukan kekuatan K bukanlah angka-angka utama. Khususnya:

  • log 2 10 = 3.321928094887362347870319429489390175864831393024580612054…

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.


8

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.


18
Pertanyaannya tidak salah arah. Dalam subjek teori informasi, sangat normal untuk membicarakan bit dengan cara ini. Dan kemudian jawaban Eugen Rieck adalah jawaban yang bagus.

2
Saya menyarankan agar Anda menyebutkan BCD (binary-coded decimal), yang biasanya diwakili oleh 4-bit dalam elektronik. Dalam istilah praktis, jumlah bit yang digunakan untuk mewakili angka desimal biasanya 4, tetapi tergantung pada implementasinya.
davidmneedham

1
@ Davidvidockock Benar, itu tergantung pada apakah itu pertanyaan teoretis atau pertanyaan implementasi.
davidmneedham

2
In (10) / In (2) adalah jawaban teoretis. 4 bit kemungkinan merupakan jawaban implementasi.
davidmneedham

2
@davidmneedham Tidak, sebagian besar angka disimpan dalam biner. BCD digunakan untuk tujuan khusus yang jarang, tetapi sebagian besar penyandian adalah bilangan bulat atau desimal floating point. Dalam sistem ini, jawaban log adalah yang benar, ia memberikan jumlah bit minimum untuk menyimpan semua angka dengan panjang desimal tertentu (pembulatan ke atas) dan menjelaskan mengapa sejumlah bit tertentu tidak menyimpan jumlah digit desimal tetap.
Jack Aidley

7

BCD - Binary Coded Decimal menggunakan 4 bit per digit, sama dengan Hexadecimal.

https://en.wikipedia.org/wiki/Binary-coded_decimal


Kecuali bahwa "BCD" sering digunakan untuk merujuk ke pengkodean karakter 6-bit.
Daniel R Hicks


@DanielRHicks Ah, oke. Wikipedia mengatakan bahwa itu digunakan pada akhir 1950-an dan awal 1960-an (yaitu sebelum EBCDIC ditemukan), jadi saya tidak malu saya tidak pernah mendengarnya. Meskipun sekarang saya menyadari bahwa nama EBCDIC berasal dari itu! Lagi pula, istilah BCD masih "sering digunakan" untuk merujuk ke pengkodean seperti yang Anda katakan.
Tn. Lister

3

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.


Saya yakin Anda bermaksud merujuk ke Hex dalam jawaban Anda sebagai Hex yang memiliki nilai AF
user92592

@ user92582 ya, ta. Dikoreksi.
davidgo

Dan Anda dapat menggunakan "limbah" 6 negara untuk menyandikan titik desimal, negatif, urutan terminator, dll. Adapun matematika desimal ... itu tidak rapi tapi sederhana? Cukup tulis beberapa kode untuk melakukan apa yang kita ajarkan kepada anak-anak kecil: p
Kaithar

@kaithar - Saya tidak percaya bahwa apa yang Anda usulkan valid, karena salah satu dari operasi itu akan membutuhkan sedikit atau lebih penuh - yang tidak Anda miliki.
davidgo

1
Tidak ada ide di mana "10 bit" akan muncul. 10 bit = 1024 nilai. Digit desimal hanya memiliki 10 nilai yang memungkinkan.
MSalters

3

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.

  • 0: 000
  • 1: 001
  • 2: 010
  • 3: 011
  • 4: 100
  • 5: 101
  • 6: 110
  • 7: 111
  • 8: 000 <- pembungkus (atau tidak digunakan)
  • 9: 001 <- pembungkus (atau tidak digunakan)

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.

  • 0: 0000
  • 1: 0001
  • 2: 0010
  • 3: 0011
  • 4: 0100
  • 5: 0101
  • 6: 0110
  • 7: 0111
  • 8: 1000
  • 9: 1001
  • 0: 1010 <- pembungkus (atau tidak digunakan)
  • 1: 1011 <- pembungkus (atau tidak digunakan)
  • 2: 1100 <- pembungkus (atau tidak digunakan)
  • 3: 1101 <- pembungkus (atau tidak digunakan)
  • 4: 1110 <- pembungkus (atau tidak digunakan)
  • 5: 1111 <- pembungkus (atau tidak digunakan)

2

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 ...


2
  • Hex (basis 16) - 4 bit
  • Oktal (basis 8) - 3 bit
  • Biner (basis 2) - 1 bit
  • Desimal (basis 10) - 3 1/3 bit.
    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.

Ini sebenarnya sedikit kurang dari 3 1/3 ... Jawaban Anda agak ambigu, dan saran bahwa angka hingga 999 dapat disimpan, bukan angka antara 0-1023 agak menyesatkan.
wizzwizz4

0

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.21 .

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 255adalah 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 FFdalam 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.


  1. 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.


4
Tidak sesederhana itu; misalnya, pengkodean 3-atau-4 bit tidak cukup untuk menentukan apakah 1001001harus 91atau tidak 49.

@Hurkyl: sekali lagi, perspektif saya menggunakan tipe integer lebar tetap - 1001001peta ke 73( 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 mengasumsikan 0bit terkemuka , jadi itu harus 49.
John Bode

2
Saya hanya mencoba menunjukkan bahwa penyandian dengan panjang variabel tidak sesederhana seperti yang Anda bayangkan; Anda perlu tahu di mana satu simbol berakhir dan yang lain dimulai. jadi Anda tidak bisa hanya mengatakan bahwa Anda dapat mewakili 8 dan 9 dengan empat bit, 4-7 dengan tiga, 2-3 dengan dua dan 0-1 dengan satu. Dan Anda dapat melihat bahwa 3.2angka yang Anda dapatkan sebenarnya melanggar batasan teori informasi log(10)/log(2).

@Hurkyl: Saya tidak mencoba untuk membuat sesuatu yang sederhana, saya juga tidak berbicara tentang segala jenis pengkodean. Nilai terbesar yang dapat direpresentasikan dalam bilangan bulat 32-bit adalah lebar 10 angka desimal (3,2 bit per digit), tetapi tidak ada korespondensi antara pengkodean biner dari salah satu angka dan pengkodean biner dari nilai tersebut. Jika Anda menggunakan beberapa bentuk pengkodean biner untuk angka desimal, maka lebar harus diperbaiki a la BCD, atau Anda harus menggunakan beberapa jenis pengkodean Huffman, yang saya tidak menganjurkan.
John Bode

1
Masalah dengan skema ini adalah bahwa Anda lupa satu bit ekstra yang Anda butuhkan untuk menunjukkan apakah 3 atau 4 bit mengikuti. Dan dengan panjang rata-rata 4,2 bit per digit desimal, ini bahkan lebih buruk daripada BCD
MSalters

0

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.


Meskipun ini adalah wawasan yang cerdas dan kontribusi yang berharga untuk kurikulum kursus OP, itu bukan jawaban untuk pertanyaan itu.
Scott
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.