Como a maioria das pessoas sabe, usando 4 bits, podemos contar de 0 a 15 (0123456789ABCDEF em hexadecimal). Mas se contássemos até 9, ainda estaríamos usando 4 bits, e os dígitos de A a F seriam desperdiçados.
No entanto, a página QR-Code da Wikipedia afirma que o uso apenas de dígitos numéricos de 0 a 9 usa 3⅓ bits por caractere, o que é correto do ponto de vista estatístico. E, no entanto, um terço de um bit não é um objeto físico, e o envio de um número de 0 a 9 usa pelo menos 4 bits, pelo que sei.
Existe alguma maneira de usar as combinações desperdiçadas para enviar efetivamente um personagem com frações de bits?
OK, deixe-me dar um exemplo: Os dois dígitos "27" devem ser enviados. Com técnicas normais de codificação, os bits enviados seriam 00100111. Poderíamos então imaginar um sistema que substituísse o dígito '2' pelo dígito 'E' ou 'F', dependendo do próximo bit; neste caso, o próximo bit é 0, então o '2' é substituído por 'E'. A sequência de bits resultante seria 1101 0 111. Por outro lado, se os dígitos "28" tiverem que ser enviados, o primeiro bit após o '2' será 1, sendo substituído pelo dígito 'F', produzindo a sequência 1111 1 000.
Nos dois casos, uma economia de 1 bit foi efetuada, porque uma mordidela foi usada para dois caracteres diferentes. Em outras palavras, três bits e meio são usados em cada caractere.
(10 * first_digit) + second_digit
e codificar isso em 7 bits, representando 0 ... 99, com os códigos 100-127 restantes para outras coisas. E há ainda mais economia com 3 dígitos compactados em 10 bits.