Vou ensinar um pequeno grupo de pessoas sobre os sistemas de numeração na computação e queria saber quantos bits por dígito existem no sistema decimal, por exemplo:
- Hex (base 16) - 4 bits
- Octal (base 8) - 3 bits
- Binário (base 2) - 1 bit
- Decimal (base 10) -?
d
, ele cobre um dígito decimal, o intervalo de0..9
.3*d
bits significam três dígitos decimais e permitem representar números inteiros do intervalo0..999
. Dez bits inteiros (pense agora em binário) fornecem um intervalo de0..1023
. 999 está bem perto de 1023, mas um pouco menos. Portanto, você deve esperard
um pouco menos que 10/3.Respostas:
O que você está procurando é o logaritmo baseado em 2 de 10, que é um número irracional de cerca de 3,32192809489 ....
O fato de você não poder usar um número inteiro de bits para um dígito decimal é a causa principal da razão pela qual muitas frações fáceis de expressar no sistema decimal (por exemplo, 1/5 ou 0,2) são impossíveis (não é difícil: realmente impossível) expressar em binário. Isso é importante ao avaliar erros de arredondamento na aritmética de ponto flutuante.
fonte
Em outras palavras, qual quantidade de informação está contida em um único dígito nesses sistemas.
Para as bases 2, base 4, base 8, base 16 e outras bases de 2 N , a resposta é óbvia porque, na base 2 N, cada dígito pode ser expresso com exatamente N dígitos.
Como você recebe N com 2 N ? Bem, você usa um logaritmo baseado em 2, que é um inverso da exponenciação.
Logaritmos baseados em K de números que não são potências de K não são números cardinais. Em particular:
Esse número pode parecer confuso, mas na verdade tem alguns usos. Por exemplo, é uma entropia de um único dígito decimal.
Para o seu caso, no entanto, não acho que esse valor seja útil. A resposta de Christian faz um bom trabalho ao explicar o porquê.
fonte
Sobre o assunto de bits:
Lamento dizer que a pergunta está equivocada. Você não usaria bits dessa maneira. Um bit é um dígito binário . Você pode converter o número decimal 10 em um 1010 binário (8 + 2), portanto precisará de 4 bits para expressar o valor decimal 10.
Poderes de 2
Você caiu em uma armadilha, usando binário (2), octal (8) e hexadecimal (16) como exemplos, porque esses são todos os poderes de 2 e, portanto, você pode pensar neles em termos de bits, enquanto 10 não é uma potência de 2, então simplesmente não funciona muito bem assim.
fonte
BCD - Decimal codificado em binário usa 4 bits por dígito, o mesmo que Hexadecimal.
https://en.wikipedia.org/wiki/Binary-coded_decimal
fonte
O uso de bits implica uma potência de 2, portanto, como outros disseram que você não pode facilmente converter 10 bits em bytes sem desperdício. Uma solução comum é usar 4 bits por hexadecimal e desperdiçar os 6 estados representados como AF. O interessante é fazer matemática decimal com isso - não é puro e simples.
Uma idéia útil para o ensino pode ser comparar como Micky Mouse pode ter desenvolvido um sistema de contagem, pois ele tem apenas 4 dedos por mão - o que leva naturalmente a um sistema octal.
fonte
Isso pode ser uma simplificação excessiva, mas depende de qual pergunta você está fazendo.
(e a resposta é basicamente octal ou hexadecimal)
Também não considero bits fracionários como bits porque, na prática, os bits não têm frações.
Q1: quantos bits você pode representar em um dígito decimal ?
A1: você pode representar 3 bits de informação em um único dígito decimal:
O esquema mais comum seria o binário direto com quebra automática em que 0 = 8 = 000 e 1 = 9 = 001. Mas você pode usar qualquer esquema, pois nada indica que essa é a única maneira de codificar bits em dígitos decimais.
ou
P2: Quantos bits são necessários para representar um dígito decimal?
A2: Você precisa de pelo menos 4 bits para representar todos os dígitos decimais. Com algum desperdício ou embalagem.
Novamente, o esquema mais comum seria o binário direto com quebra automática, mas você poderia usar qualquer outro esquema.
fonte
Na base 1024, cada símbolo tem 10 bits. Três dígitos decimais têm a mesma quantidade de informações que um dígito na base 1000, que é um pouco menor que 1024. Portanto, um dígito decimal tem um pouco menos que 10/3 bits. Essa aproximação fornece 3,3333333 ..., enquanto o número exato é 3,321928 ...
fonte
2 10 = 1.024
10 3 = 1.000
2 20 = 1.048.576
10 6 = 1.000.000
3 dígitos na base 10 até 999 podem ser mantidos em 10 bits na base 2.
6 dígitos na base 10 até 999.999 podem ser mantidos em 20 bits na base 2.
Essa é a idéia de kilobytes, megabytes e gigabytes originados.
fonte
Isenção de responsabilidade - eu não sou um teórico da informação, apenas um macaco de código que trabalha principalmente em C e C ++ (e, portanto, com tipos de largura fixa), e minha resposta será dessa perspectiva específica.
São necessários em média 3,2 bits para representar um único dígito decimal - 0 a 7 pode ser representado em 3 bits, enquanto 8 e 9 exigem 4.
(8*3 + 2*4)/10 == 3.2
1 .Isso é menos útil do que parece. Por um lado, você obviamente não tem frações nem um pouco. Por outro lado, se você estiver usando tipos inteiros nativos (por exemplo, não BCD ou BigInt), não estará armazenando valores como uma sequência de dígitos decimais (ou seus equivalentes binários). Um tipo de 8 bits pode armazenar alguns valores com até 3 dígitos decimais, mas você não pode representar todos os valores de 3 dígitos decimais em 8 bits - o intervalo é
[0..255]
. Você não pode representar os valores[256..999]
em apenas 8 bits.Quando falamos de valores , usaremos decimal se o aplicativo esperar (por exemplo, um aplicativo bancário digital). Quando falamos de bits , geralmente usamos hexadecimal ou binário (quase nunca uso octal, pois trabalho em sistemas que usam bytes de 8 bits e palavras de 32 bits, que não são divisíveis por 3).
Os valores expressos em decimal não são mapeados corretamente para seqüências binárias. Tome o valor decimal
255
. Os equivalentes binários de cada dígito seria010
,101
,101
. No entanto, a representação binária do valor255
é11111111
. Simplesmente não há correspondência entre nenhum dígito decimal no valor da sequência binária. Mas há uma correspondência direta com dígitos hexadecimais -F == 1111
, para que o valor possa ser representado comoFF
em hexadecimal.Se você estiver em um sistema em que bytes de 9 bits e palavras de 36 bits são a norma, então octal faz mais sentido, já que os bits agrupam-se naturalmente em três.
fonte
1001001
deve ser91
ou49
.1001001
mapeia para73
(64 + 8 + 1
). Não o interpreto como uma sequência de dígitos decimais codificados em binários. Se deveria ser BCD, que deve usar 4 bits por dígito, devemos assumir um0
bit inicial, assim deve ser49
.3.2
figura que você obtém realmente viola a teoria da informaçãolog(10)/log(2)
.Se eu estivesse ensinando isso, explicaria primeiro o que significa um número (expresso como uma série de dígitos). ou seja, da direita para a esquerda, assumindo a base n, a * n ^ 0 + b * n ^ 1 + c * n ^ 2 ... z * n ^ y.
Explique então que 10 ^ 3 é aproximadamente igual a 2 ^ 10. Não é exato e é o motivo dos computadores; geralmente não sabemos o que 2k realmente significa (são 2.000 ou 2.048?) Serve razoavelmente bem para aproximações rápidas. 2 ^ 16 é de cerca de 2 ^ (16 - 10) * 1.000, ou 2 ^ 6 (64) * 1.000 ou 64.000. Na realidade, é 65.536, mas se você não se importa em ficar em torno de um por cento, funciona bastante bem para aproximações rápidas.
fonte