Mam zamiar nauczyć małą grupę ludzi o systemach numeracji w komputerach i zastanawiałem się, ile bitów na cyfrę jest w systemie dziesiętnym, na przykład:
- Szesnastkowy (podstawa 16) - 4 bity
- Oktalowy (podstawa 8) - 3 bity
- Binarny (baza 2) - 1 bit
- Dziesiętny (podstawa 10) -?
d
, to obejmuje jedną cyfrę dziesiętną, zakres0..9
.3*d
bity oznaczają trzy cyfry dziesiętne i pozwalają reprezentować liczby całkowite z zakresu0..999
. Całe dziesięć bitów (teraz binarne) daje zakres0..1023
. 999 jest dość blisko 1023, ale trochę mniej. Więc możesz oczekiwać, żed
powinna być nieco mniejsza niż 10/3.Odpowiedzi:
To, czego szukasz, to logarytm oparty na liczbie 2 o wartości 10, co jest liczbą nieracjonalną wynoszącą około 3,32192809489 ....
Fakt, że nie można użyć liczby całkowitej w postaci dziesiętnej, jest główną przyczyną, dla której wiele ułamków łatwych do wyrażenia w systemie dziesiętnym (np. 1/5 lub 0,2) jest niemożliwych (nie jest to trudne: naprawdę niemożliwe) do wyrażenia binarnego. Jest to ważne przy ocenie błędów zaokrąglania w arytmetyki zmiennoprzecinkowej.
źródło
Innymi słowy, jaka ilość informacji jest zawarta w jednej cyfrze w tych systemach.
W przypadku podstawy 2, podstawy 4, podstawy 8, podstawy 16 i innych 2 N zasad odpowiedź jest oczywista, ponieważ w podstawie 2 N każdą cyfrę można wyrazić dokładnie N cyframi.
Jak uzyskać N, biorąc pod uwagę 2 N ? Cóż, używasz logarytmu opartego na 2, który jest odwrotnością potęgowania.
Logarytmy oparte na K na liczbach, które nie są potęgami K, nie są liczbami głównymi. W szczególności:
Ta liczba może wydawać się myląca, ale w rzeczywistości ma pewne zastosowania. Na przykład jest to entropia pojedynczej cyfry dziesiętnej.
Jednak w twoim przypadku nie sądzę, aby ta wartość była użyteczna. @ Odpowiedź Christiana dobrze wyjaśnia, dlaczego.
źródło
Na temat bitów:
Przykro mi powiedzieć, że pytanie jest błędne. Nie użyłbyś bitów w ten sposób. Bit jest cyfrą binarną . Możesz przekonwertować liczbę dziesiętną 10 na dwójkową 1010 (8 + 2), więc potrzebujesz 4 bitów, aby wyrazić wartość dziesiętną 10.
Potęgi 2
Wpadłeś w pułapkę, używając przykładów binarnych (2), ósemkowych (8) i szesnastkowych (16) jako przykładów, ponieważ są to potęgi 2, a zatem możesz myśleć o nich w kategoriach bitów, podczas gdy 10 nie jest potęgą 2, więc po prostu nie działa tak dobrze.
źródło
BCD - Binary Coded Decimal używa 4 bitów na cyfrę, tak samo jak Hexadecimal.
https://en.wikipedia.org/wiki/Binary-coded_decimal
źródło
Używanie bitów oznacza potęgę 2, a zatem, jak powiedzieli inni, nie można z łatwością podzielić 10 bitów na bajty bez straty. Powszechnym rozwiązaniem jest użycie 4 bitów w systemie szesnastkowym i zmarnowanie 6 stanów przedstawionych jako AF. Interesującym elementem jest robienie z tym matematyki dziesiętnej - nie jest to schludne i proste.
Przydatnym pomysłem nauczania może być porównanie, w jaki sposób Myszka Miki opracowała system liczenia, ponieważ ma tylko 4 palce na rękę - co naturalnie prowadzi do systemu opartego na oktale.
źródło
Może to być nadmierne uproszczenie, ale zależy to od zadanego pytania.
(a odpowiedź jest w zasadzie ósemkowa lub szesnastkowa)
Nie uważam też bitów ułamkowych za bity, ponieważ w praktyce bity nie mają ułamków.
P1: Ile bitów możesz przedstawić w postaci dziesiętnej ?
A1: Możesz przedstawić 3 bity informacji za pomocą jednej cyfry dziesiętnej:
Najpopularniejszym schematem byłby prosty plik binarny z zawijaniem, gdzie 0 = 8 = 000, a 1 = 9 = 001. Ale możesz użyć dowolnego schematu, nic nie mówi, że jest to jedyny sposób kodowania bitów na cyfry dziesiętne.
lub
Q2: Ile bitów zajmuje cyfra dziesiętna?
A2: Potrzebujesz co najmniej 4 bitów do przedstawienia wszystkich cyfr dziesiętnych. Z niektórymi odpadami lub opakowaniami.
Ponownie najpopularniejszym schematem byłby prosty plik binarny z zawijaniem, ale można użyć dowolnego innego schematu.
źródło
W bazie 1024 każdy symbol ma 10 bitów. Trzy cyfry dziesiętne mają taką samą ilość informacji jak jedna cyfra w bazie 1000, czyli nieco mniej niż 1024. Dlatego cyfra dziesiętna ma nieco mniej niż 10/3 bity. To przybliżenie daje 3,333333 ..., a dokładna liczba to 3,321928 ...
źródło
2 10 = 1 024
10 3 = 1 000
2 20 = 1 048 576
10 6 = 1 000 000
3 cyfry w bazie 10 do 999 można przechowywać w 10 bitach w bazie 2.
6 cyfr w bazie 10 do 999,999 można przechowywać w 20 bitach w bazie 2.
Takie były idee kilobajtów, megabajtów i gigabajtów.
źródło
Zastrzeżenie - nie jestem teoretykiem informacji, tylko małpą kodu, która pracuje głównie w C i C ++ (a zatem z typami o stałej szerokości), a moja odpowiedź będzie z tej konkretnej perspektywy.
Trwa średnio 3,2 bitów reprezentuje cyfrę dziesiętną - 0 do 7, może być reprezentowana w 3 bity, natomiast 8 i 9 wymagają 4.
(8*3 + 2*4)/10 == 3.2
1 .Jest to mniej przydatne niż się wydaje. Po pierwsze, oczywiście nie masz ułamków. Po drugie, jeśli używasz rodzimych typów liczb całkowitych (tj. Nie BCD ani BigInt), nie przechowujesz wartości jako sekwencji cyfr dziesiętnych (lub ich binarnych odpowiedników). Typ 8-bitowy może przechowywać niektóre wartości, które zajmują do 3 cyfr dziesiętnych, ale nie można przedstawić wszystkich wartości 3-cyfrowych w 8 bitach - zakres wynosi
[0..255]
. Nie możesz reprezentować wartości[256..999]
tylko w 8 bitach.Kiedy mówimy o wartościach , użyjemy dziesiętnego, jeśli aplikacja tego oczekuje (np. Aplikacja bankowości cyfrowej). Kiedy mówimy o bitach , zwykle używamy szesnastkowego lub binarnego (prawie nigdy nie używam ósemkowego, ponieważ pracuję na systemach, które używają 8-bitowych bajtów i 32-bitowych słów, które nie są podzielne przez 3).
Wartości wyrażone w postaci dziesiętnej nie odwzorowują jednoznacznie sekwencji binarnych. Weź wartość dziesiętną
255
. Binarne odpowiedniki każdej cyfry byłoby010
,101
,101
. Jednak binarna reprezentacja wartości255
to11111111
. Po prostu nie ma korespondencja między dowolny cyfr po przecinku w wartości do sekwencji binarnej. Ale istnieje bezpośrednia zgodność z cyframi szesnastkowymi -F == 1111
tak, że wartość może być reprezentowana jakFF
w systemie szesnastkowym.Jeśli korzystasz z systemu, w którym 9-bitowe bajty i 36-bitowe słowa są normą, to ósemka ma większy sens, ponieważ bity naturalnie grupują się w trójki.
źródło
1001001
należy91
lub49
.1001001
odwzorowuje na73
(64 + 8 + 1
). Nie interpretuję tego jako ciąg cyfr binarnych dziesiętnych. Jeśli ma to być BCD, który musi wykorzystywać 4 bity na cyfrę, to musimy założyć0
bit wiodący , więc tak musi być49
.3.2
liczba, którą otrzymujesz, jest sprzeczna z teorią informacjilog(10)/log(2)
.Gdybym tego nauczał, najpierw wyjaśniłbym, co oznacza liczba (wyrażona jako ciąg cyfr). tzn. od prawej do lewej, przyjmując podstawę n, a * n ^ 0 + b * n ^ 1 + c * n ^ 2 ... z * n ^ y.
Następnie wyjaśnij, że 10 ^ 3 jest w przybliżeniu równe 2 ^ 10. To nie jest dokładne i jest przyczyną w komputerach, często nie wiemy, co tak naprawdę oznacza 2k (czy to 2000 czy 2048?) Służy dość dobrze do szybkich przybliżeń. 2 ^ 16 to około 2 ^ (16-10) * 1000 lub 2 ^ 6 (64) * 1000 lub 64 000. W rzeczywistości jest to 65 536, ale jeśli nie masz nic przeciwko byciu mniej więcej procent, działa dość dobrze w przypadku szybkich przybliżeń.
źródło