ZigZag Encoding
L'encodage ZigZag associe les entiers signés à des entiers non signés afin que les nombres négatifs de faible amplitude occupent eux aussi peu d'octets ; combiné avec Varint, il donne un codage à longueur variable efficace.
Objectif
Rend les petits nombres négatifs (comme -1) aussi compacts que les petits nombres positifs en codage à longueur variable, évitant l'expansion causée par les bits de poids fort à 1 du complément à deux.
Mécanisme
La règle d'association : n ≥ 0 → 2n, et n < 0 → 2|n| - 1 — c'est-à-dire 0→0, -1→1, 1→2, -2→3, 2→4... Les entiers alternent par valeur absolue, de sorte que les petites valeurs correspondent à de petits nombres non signés.
Cas d’usage
- Encodage sint32/sint64 de Protobuf
- Sérialisation compacte d'entiers signés
- Colonnes signées à longueur variable en bases de données