Como la mayoría de las personas aquí saben, al usar 4 bits, podemos contar de 0 a 15 (0123456789ABCDEF en hexadecimal). Pero si tuviéramos que contar solo hasta 9, seguiríamos usando 4 bits, y los dígitos de A a F se desperdiciarían.
Sin embargo, la página de códigos QR de Wikipedia establece que el uso de solo dígitos numéricos del 0 al 9 usa 3⅓ bits por carácter, lo cual es correcto desde un punto de vista estadístico. Y sin embargo, un tercio de un bit no es un objeto físico, y enviar un número del 0 al 9 usa al menos 4 bits, que yo sepa.
¿Hay alguna forma de usar las combinaciones desperdiciadas para enviar efectivamente un personaje con fracciones de bits?
Bien, permítanme dar un ejemplo: se deben enviar los dos dígitos "27". Con técnicas de codificación normales, los bits enviados serían 00100111. Entonces podríamos imaginar un sistema que reemplazaría el dígito '2' por el dígito 'E' o 'F', dependiendo del siguiente bit; en este caso, el siguiente bit es 0, por lo que el '2' se reemplaza por 'E'. La cadena de bits resultante sería 1101 0 111. Por otro lado, si se deben enviar los dígitos "28", el primer bit después del '2' es un 1, por lo que se reemplaza por el dígito 'F' en su lugar, produciendo la cadena de 1.111 1 000.
En ambos casos, se ha efectuado una economía de 1 bit, porque se usó un mordisco para dos caracteres diferentes. En otras palabras, se usan tres bits y medio en cada carácter.
(10 * first_digit) + second_digit
y codificar eso en 7 bits, que representa 0 ... 99, con los códigos 100-127 restantes para otras cosas. Y aún hay más ahorros con 3 dígitos comprimidos en 10 bits.