Aller au contenu
uencoder

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

Outils associés

References