Ondalık sistemde basamak başına kaç bit [kapalı]


28

Küçük bir grup kişiye, bilgisayardaki numaralandırma sistemleri hakkında bilgi vereceğim ve örneğin ondalık basamakta basamak başına kaç bit olduğunu merak ediyorum.

  • Altıgen (taban 16) - 4 bit
  • Sekizlik (8 taban) - 3 bit
  • İkili (temel 2) - 1 bit
  • Ondalık (temel 10) -?

7
Sezgi: Diyelim ki aradığın şey d, bir ondalık basamağı, aralığını kapsıyor 0..9. 3*dbit, üç ondalık basamak anlamına gelir ve aralıktaki tamsayıları temsil etmenize olanak sağlar 0..999. Bütün on bit (şimdi ikili düşünün) bir dizi verir 0..1023. 999, 1023'e oldukça yakın, ancak biraz daha az. Öyleyse, 10 / d3'ten biraz daha az olmasını bekleyebilirsiniz .
Kamil Maciorowski

5
Bu gönderi, Yığın Taşması'na Süper Kullanıcı'dan daha uygun olacak gibi görünüyor.
gmarmstrong

21
@gmarmstrong: Ben Matematiği savunuyorum. (veya muhtemelen SoftwareEngineering.SE). Bu doğrudan bir programlama problemiyle ilgili değildir.
flater

10
@Flater: Matematik kesinlikle doğru yer, çünkü bu temel olarak bilgi teorisi 101.
MechMK1

7
Bunu bilmemek utanılacak bir şey değil, ancak sayı sistemlerini öğretmek için en iyi kişi olmayabilir.
WGroleau

Yanıtlar:


96

Aradığın şey, mantıklı bir sayı olan 3.32192809489 olan 10'luk 2 tabanlı logaritma ...

Ondalık basamak için bir tamsayı bit sayısı kullanamamanız, ondalık sistemde (örneğin 1/5 veya 0,2) ifade edilmesi kolay olan birçok kesirin imkansız olmasının temel nedenidir. imkansız) ikili olarak ifade etmek. Bu, kayan nokta aritmetik özelliklerinde yuvarlama hatalarını değerlendirirken önemlidir.


Yorumlar genişletilmiş tartışmalar için değildir; bu konuşma sohbete taşındı .
DavidPostill

20

Başka bir deyişle, bu sistemlerde ne kadar miktarda bilgi tek bir basamakta yer almaktadır.

Taban 2, taban 4, taban 8, taban 16 ve diğer 2 N tabanlar için cevap açıktır çünkü taban 2 N'de her bir rakam tam olarak N rakamı ile ifade edilebilir.

N 2 N verilsin ? Peki, üstelleşmenin tersi olan 2 tabanlı bir logaritma kullanıyorsunuz.

  • günlük 2 2 = 1 (baz 2'de basamak başına 1 bit)
  • günlük 2 4 = 2 (temel 4'te basamak başına 2 bit)
  • günlük 2 8 = 3 (8 numaralı basamaktaki basamak başına 3 bit)
  • log 2 16 = 4 (16 tabandaki basamak başına 4 bit)

K'nın kuvveti olmayan sayıların K-logaritmaları kardinal sayılar değildir. Özellikle:

  • log 2 10 = 3.321928094887362347870319429489390175864831393024580612054…

Bu sayı kafa karıştırıcı görünebilir, ancak aslında bazı kullanımları vardır. Örneğin, tek bir ondalık basamağın entropisidir .

Sizin durumunuz için, bu değerin bir faydası olduğunu sanmıyorum. @ Christian'ın cevabı nedenini açıklamakta iyi bir iş çıkarır.


8

Bitler konusunda:

Sorunun yanlış yönlendirildiğini söylediğim için üzgünüm. Bu şekilde bit kullanmazsın. Biraz ikili bir rakamdır . Ondalık sayıyı 10, ikili bir 1010 (8 + 2) değerine dönüştürebilirsiniz, böylece 10 ondalık sayıyı ifade etmek için 4 bit gerekir.


2 yetkileri

İkili (2), sekizli (8) ve onaltılık (16) kullanarak örnek olarak bir tuzağa düşmüşsünüz, çünkü bunların hepsi 2'nin gücüdür ve bu yüzden onları bit olarak düşünebilirsiniz, oysa 10, 2 değerinde bir güç değil, bu yüzden böyle iyi işlemiyor.


18
Soru yanlış yönlendirilmiş değil. Bilgi teorisi konusunda, bu şekilde bitler hakkında konuşmak tamamen normaldir. Ve sonra Eugen Rieck'in cevabı iyi bir cevaptı.

2
Elektronikte genellikle 4 bit ile gösterilen BCD'den (ikili kodlu ondalık) bahsetmenizi öneririm. Pratik açıdan, bir ondalık sayıyı temsil etmek için kullanılan bitlerin sayısı tipik olarak 4'tür, ancak uygulamaya bağlıdır.
davidmneedham

1
@DavidStockinger Doğru, teorik bir soru mu yoksa uygulama sorusu mu olduğuna bağlı.
davidmneedham,

2
ln (10) / ln (2) teorik cevaptır. 4 bit olası uygulama cevaptır.
davidmneedham

2
@davidmneedham Hayır, çoğu sayı ikili olarak depolanır. BCD nadir özel amaçlar için kullanılır, ancak çoğu kodlama tamsayı veya kayan nokta ondalıktır. Bu sistemlerde log cevabı doğru cevaptır, verilen ondalık uzunluğun tüm sayılarını (yuvarlama) saklamak için minimum sayıda bit verir ve verilen belirli sayıda bitin neden sabit sayıdaki ondalık basamakları kaydetmediğini açıklar.
Jack Aidley

7

BCD - İkili Kodlu Ondalık, onaltılık basamağa benzer şekilde basamak başına 4 bit kullanır.

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


Bunun dışında "BCD", 6 bitlik karakter kodlamasına atıfta bulunmak için kullanılır.
Daniel R Hicks


@DanielRHicks Ah, tamam. Wikipedia, 1950'lerin sonlarında ve 1960'ların başlarında (EBCDIC'in icat edilmesinden önce) kullanıldığını söylüyor, bu yüzden hiç duymadığım için utanmıyorum. Şimdi EBCDIC adının bundan kaynaklandığını fark etsem de! Her neyse, BCD terimi hala söylediğiniz gibi kodlamaya atıfta bulunmak için "sık sık kullanılmıyor".
Bay Lister,

3

Bitleri kullanmak, 2 gücüne işaret eder, bu nedenle, diğerleri dediği gibi, israf etmeden 10 bit'i baytlara kolayca atayamayacağınızı söyler. Yaygın bir çözüm onaltılık başına 4 bit kullanmak ve AF olarak gösterilen 6 durumu boşa harcamaktır. İlginç olanı bununla ondalık matematik yapıyor - temiz ve basit değil.

Yararlı bir öğretim fikri, Micky Mouse'un nasıl bir sayma sistemi geliştirdiğini, elle sadece 4 parmağı olduğu için - ki bu doğal olarak sekizlik tabanlı bir sisteme öncülük ediyor olabilir.


Cevabınızda
Hex’e

@ user92582 evet, ta. Düzeltildi.
davidgo

Ve bu "atık" 6 durumlarını ondalık nokta, negatif, sıra sonlandırıcı vb. Kodlamak için kullanabilirsiniz. Ondalık matematik için olduğu gibi ... düzgün değil basit mi? Sadece biz küçük çocuklara öğretmek ne yapacağını bazı kod yazmak: p
Kaithar

@kaithar - Teklif ettiğin şeyin geçerli olduğuna inanmıyorum, çünkü bu işlemlerin herhangi birinin bir miktarını veya daha fazlasını gerektireceğini - buna sahip olmadığın için.
davidgo

1
"10 bit" in nerede oluştuğu konusunda hiçbir fikrin yok. 10 bit = 1024 değer. Ondalık bir rakam yalnızca 10 olası değere sahiptir.
MSalters

3

Bu aşırı basitleştirme olabilir, ancak hangi soruyu sorduğunuza bağlı.
(ve cevap temelde sekizlik veya onaltılı)

Ayrıca kesirli bitleri bit olarak görmüyorum çünkü pratik kullanımda bitlerin kesirleri yok.

S1: Ondalık basamakta kaç bit gösterebilirsin ?

A1: 3 bit bilgi tek bir ondalık basamağa gösterilebilir:

En yaygın kullanılan şema, 0 = 8 = 000 ve 1 = 9 = 001 olan sargılı düz ikilidir. Ancak herhangi bir düzeni kullanabilirsiniz, bunun bitleri ondalık basamağa kodlamanın tek yolu olduğunu söyleyen hiçbir şey yoktur.

  • 0: 000
  • 1: 001
  • 2: 010
  • 3: 011
  • 4: 100
  • 5: 101
  • 6: 110
  • 7: 111
  • 8: 000 <- sarma (veya kullanılmamış)
  • 9: 001 <- sarma (veya kullanılmamış)

veya

S2: Ondalık basamağı göstermek için kaç bit gerekiyor?

A2: Tüm ondalık basamakları temsil etmek için en az 4 bit gerekir. Biraz atık veya ambalaj ile.

Yine en yaygın şema sarma ile düz ikili olacaktır ancak başka herhangi bir şema kullanabilirsiniz.

  • 0: 0000
  • 1: 0001
  • 2: 0010
  • 3: 0011
  • 4: 0100
  • 5: 0101
  • 6: 0110
  • 7: 0111
  • 8: 1000
  • 9: 1001
  • 0: 1010 <- sarma (veya kullanılmamış)
  • 1: 1011 <- sarma (veya kullanılmamış)
  • 2: 1100 <- sarma (veya kullanılmamış)
  • 3: 1101 <- sarma (veya kullanılmamış)
  • 4: 1110 <- sarma (veya kullanılmamış)
  • 5: 1111 <- sarma (veya kullanılmamış)

2

1024 bazında, her sembol 10 bittir. Üç ondalık basamak, 1000 tabanındaki bir basamakla aynı miktarda bilgiye sahiptir; bu, 1024'ten biraz daha azdır. Bu nedenle, ondalık basamak, 10/3 bit'ten biraz daha azdır. Bu yaklaşım 3.333333 ... verirken, tam sayı 3.321928 ...


2
  • Altıgen (taban 16) - 4 bit
  • Sekizlik (8 taban) - 3 bit
  • İkili (temel 2) - 1 bit
  • Ondalık (temel 10) - 3 1/3 bit.
    2 10 = 1,024
    10 3 = 1,000
    2 20 = 1,048,576
    10 6 = 1,000,000
    10 tabanından 999'a kadar 3 basamak, 2 tabanından 10 bitte
    tutulabilir. 2.
    Bu ortaya çıkan kilobayt, megabayt ve gigabayt fikriydi.

Aslında 3 1/3'ten biraz daha az ... Cevabınız biraz belirsiz ve 0-1023 arasındaki rakamlar yerine 999'a kadar rakamların saklanabileceği önerisi biraz yanıltıcı.
wizzwizz4

0

Sorumluluk reddi - Ben bir bilgi teorisyeni değilim, yalnızca C ve C ++ 'da (ve böylece sabit genişlikli türlerde) çalışan bir kod maymunu ve cevabım bu özel açıdan olacak.

Bu alan ortalama 8 ve 9, 4. ihtiyaç duyarken, 0 ile 7 3 bit temsil edilebilir - tek bir ondalık hane temsil 3.2 bit (8*3 + 2*4)/10 == 3.21 .

Bu göründüğünden daha az kullanışlı. Birincisi, belli ki biraz kesiriniz yok. Birincisi, yerel tam sayı türlerini kullanıyorsanız (yani, BCD veya BigInt değil), değerleri ondalık basamak dizisi (veya bunların ikilik eşdeğerleri) dizisi olarak saklamıyorsunuzdur. 8 bitlik bir tür, 3 ondalık basamağa kadar bazı değerleri depolayabilir, ancak tüm 3 basamaklı basamak değerlerini 8 bit olarak gösteremezsiniz - aralık [0..255]. Değerleri [256..999]sadece 8 bit olarak gösteremezsiniz .

Değerlerden bahsederken , uygulama beklediğinde ondalık kullanırız (örneğin, dijital bankacılık uygulaması). Ne zaman Bahsettiğimiz bit , genellikle onaltılık veya ikili kullanacağız (Neredeyse 3 ile bölünebilir olmayan 8 bit bayt ve 32 bit sözcükleri kullanmak sistemlerde işten beri sekizlik hiç kullanmıyorum).

Ondalık olarak ifade edilen değerler, ikili dizilere temiz bir şekilde eşleşmiyor. Ondalık değeri al 255. Her parmağın ikili eşdeğerleri olacağını 010, 101, 101. Ancak, değerin ikili gösterimi255 olduğunu 11111111. İkili diziye olan değerdeki herhangi bir ondalık basamağın arasında yazışma yok . Ancak onaltılık rakamlarla doğrudan bir yazışma vardır - F == 1111bu değer FFonaltılı olarak gösterilebilir.

9 bitlik baytların ve 36 bitlik kelimelerin norm olduğu bir sistemdeyseniz, sekizlik doğal olarak üçlü olarak gruplandığı için octal daha mantıklı olur.


  1. Aslında, basamak başına ortalama 0 ve 1 yalnızca bir bit gerektirdiğinden, 2 ve 3 yalnızca 2 bit gerektirdiğinden daha küçüktür. Ancak pratikte 0 ile 7 arasında 3 bit almayı düşünüyoruz. Sadece hayatı birçok yönden kolaylaştırır.


4
Bu o kadar basit değil; örneğin, 3 veya 4 bit kodlamanın veya 1001001olması gerektiğini söylemek için yeterli değil . 9149

@Hurkyl: yine benim perspektif bir tamsayı türleri genişliği sabit kullanıyor - 1001001eşleştiren 73( 64 + 8 + 1). İkili kodlanmış ondalık basamak dizisi olarak yorumlamıyorum. O geçtiyse sözde basamak başına 4 bit kullanmalıdır BCD olmak, o zaman lider üstlenmeleri gerektiğini 0o olmalı, böylece biraz 49.
John Bode,

2
Değişken uzunluklu kodlamaların sizin yaptığınız kadar basit olmadığını belirtmeye çalışıyordum; Bir sembolün nerede bittiğini ve diğerinin nerede başladığını söylemelisin. yani 8 ve 9'u dört bit ile temsil edebileceğinizi söyleyemezsiniz, 4-7 ile üç, 2-3 ile iki ve 0-1 ile bir tane. Ve gördüğünüz 3.2rakamın gerçekte bağlı olduğu bilgi teorisini ihlal ettiğini görebilirsiniz log(10)/log(2).

@Hurkyl: Basit bir şey yapmaya çalışmıyordum, ne de herhangi bir kodlamadan bahsediyordum. 32 bit bir tam sayıda gösterilebilecek en büyük değer, 10 ondalık basamak genişliğindedir (basamak başına 3,2 bit), ancak herhangi bir basamağın ikili kodlaması ile değerin ikili kodlaması arasında yazışma yoktur. Ondalık basamaklar için bir miktar ikili kodlama kullanıyorsanız, ya genişlik ya la BCD olarak sabitlenmeli ya da savunmadığım bir tür Huffman kodlaması kullanmalısınız.
John Bode

1
Bu şemadaki sorun, 3 veya 4 bit izleyip izlemeyeceğinizi belirtmek için ihtiyacınız olan ekstra parçayı unutmanızdır. Ve ondalık basamak başına ortalama 4.2 bit uzunluğunda, bu
BCD'den

0

Bunu öğretiyor olsaydım, öncelikle bir sayının (bir dizi basamak anlamına gelir) ne olduğunu açıklardım. yani, sağdan sola, baz n varsayarsak, a * n ^ 0 + b * n ^ 1 + c * n ^ 2 ... z * n ^ y.

Öyleyse 10 ^ 3'ün yaklaşık olarak 2 ^ 10'a eşit olduğunu açıklayın. Bu kesin değildir ve bilgisayarlardaki neden, genellikle 2k'nin gerçekte ne anlama geldiğini bilmiyoruz (2000 veya 2,048 mi?) Hızlı yaklaşımlar için oldukça iyi hizmet veriyor. 2 ^ 16, yaklaşık 2 ^ (16 - 10) * 1.000 veya 2 ^ 6 (64) * 1.000 veya 64.000'dir. Gerçekte, 65,536'dır, ancak yüzde bir civarında olmamak sakıncası yoksa, hızlı yaklaşımlar için oldukça iyi çalışır.


Bu akıllıca bir fikir ve OP'nin ders müfredatına değerli bir katkı olsa da, sorunun cevabı değil.
Scott
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.