Zum Inhalt springen
uencoder

ZigZag Encoding

Die ZigZag-Kodierung bildet vorzeichenbehaftete Ganzzahlen auf vorzeichenlose ab, sodass auch betragsmäßig kleine negative Zahlen wenige Bytes belegen; kombiniert mit Varint ergibt sich eine effiziente variablange Kodierung.

Zweck

Macht kleine negative Zahlen (wie -1) unter variabler Längenkodierung ebenso kompakt wie kleine positive und vermeidet die durch lauter Einsen in den hohen Bits der Zweierkomplementdarstellung verursachte Aufblähung.

Mechanismus

Die Abbildungsregel: n ≥ 0 → 2n und n < 0 → 2|n| - 1 — also 0→0, -1→1, 1→2, -2→3, 2→4... Die Ganzzahlen wechseln sich nach dem Betrag ab, sodass kleine Werte auf kleine vorzeichenlose Zahlen abgebildet werden.

Anwendungsfälle

  • Protobuf-sint32/sint64-Kodierung
  • Kompakte Serialisierung vorzeichenbehafteter Ganzzahlen
  • Variablange vorzeichenbehaftete Spalten in Datenbanken

Verwandte Tools

References