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 seria 010
, 101
, 101
. No entanto, a representação binária do valor 255
é 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 como FF
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.
- Na verdade, a média por dígito é menor, pois 0 e 1 requerem apenas um bit, enquanto 2 e 3 exigem apenas 2 bits. Mas, na prática, consideramos 0 a 7 para levar 3 bits. Apenas facilita a vida de várias maneiras.
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.