Comme la plupart des gens ici le savent, en utilisant 4 bits, nous pouvons compter de 0 à 15 (0123456789ABCDEF en hexadécimal). Mais si nous devions seulement compter jusqu'à 9, nous utiliserions toujours 4 bits et les chiffres de A à F seraient gaspillés.
Cependant, la page QR-Code de Wikipedia indique que l'utilisation uniquement de chiffres numériques de 0 à 9 utilise 3⅓ bits par caractère, ce qui est correct d'un point de vue statistique. Et pourtant, un tiers de bit n'est pas un objet physique, et l'envoi d'un nombre de 0 à 9 utilise au moins 4 bits à ma connaissance.
Existe-t-il un moyen d'utiliser les combinaisons gaspillées pour envoyer efficacement un caractère avec des fractions de bits?
OK, permettez-moi de donner un exemple: les deux chiffres "27" doivent être envoyés. Avec des techniques de codage normales, les bits envoyés seraient 00100111. On pourrait alors imaginer un système qui remplacerait le chiffre «2» par le chiffre «E» ou «F», selon le bit suivant; dans ce cas, le bit suivant est 0, donc le «2» est remplacé par «E». La chaîne de bits résultante serait alors 1101 0 111. En revanche, si les chiffres "28" doivent être envoyés, le premier bit après le "2" est un 1, il est donc remplacé par le chiffre "F" à la place, donnant la chaîne 1111 1 000.
Dans les deux cas, une économie de 1 bit a été effectuée, car un quartet a été utilisé pour deux caractères différents. En d'autres termes, trois bits et demi sont utilisés sur chaque caractère.
(10 * first_digit) + second_digit
et encoder cela en 7 bits, représentant 0 ... 99, avec les codes 100-127 laissés pour d'autres choses. Et il y a encore plus d'économies avec 3 chiffres compressés en 10 bits.