Descargo de responsabilidad: no soy un teórico de la información, solo un mono de código que trabaja principalmente en C y C ++ (y, por lo tanto, con tipos de ancho fijo), y mi respuesta será desde esa perspectiva particular.
Se necesitan en promedio 3.2 bits para representar un solo dígito decimal: 0 a 7 se pueden representar en 3 bits, mientras que 8 y 9 requieren 4. (8*3 + 2*4)/10 == 3.2
1 .
Esto es menos útil de lo que parece. Por un lado, obviamente no tienes fracciones de un poco. Por otro lado, si está utilizando tipos enteros nativos (es decir, no BCD o BigInt), no está almacenando valores como una secuencia de dígitos decimales (o sus equivalentes binarios). Un tipo de 8 bits puede almacenar algunos valores que toman hasta 3 dígitos decimales, pero no puede representar todos los valores de 3 dígitos decimales en 8 bits; el rango es [0..255]
. No puede representar los valores [256..999]
en solo 8 bits.
Cuando hablamos de valores , usaremos decimal si la aplicación lo espera (por ejemplo, una aplicación de banca digital). Cuando hablamos de bits , usualmente usamos hexadecimal o binario (casi nunca uso octal ya que trabajo en sistemas que usan bytes de 8 bits y palabras de 32 bits, que no son divisibles por 3).
Los valores expresados en decimal no se asignan limpiamente a secuencias binarias. Toma el valor decimal 255
. Los equivalentes binarios de cada dígito serían 010
, 101
, 101
. Sin embargo, la representación binaria del valor 255
es 11111111
. Simplemente no hay correspondencia entre ninguno de los dígitos decimales en el valor de la secuencia binaria. Pero existe una correspondencia directa con los dígitos hexadecimales F == 1111
, por lo que ese valor puede representarse como FF
en hexadecimal.
Si está en un sistema donde los bytes de 9 bits y las palabras de 36 bits son la norma, entonces octal tiene más sentido ya que los bits se agrupan naturalmente en tres.
- En realidad, el promedio por dígito es menor ya que 0 y 1 solo requieren un solo bit, mientras que 2 y 3 solo requieren 2 bits. Pero, en la práctica, consideramos de 0 a 7 para tomar 3 bits. Simplemente hace la vida más fácil de muchas maneras.
d
, cubre un dígito decimal, el rango de0..9
.3*d
Los bits significan tres dígitos decimales y le permiten representar enteros del rango0..999
. Diez bits enteros (piense en binario ahora) dan un rango de0..1023
. 999 está bastante cerca de 1023, pero un poco menos. Por lo tanto, puede esperard
que sea un poco menos de 10/3.