コンテンツへスキップ
uencoder

ZigZag Encoding

ZigZagエンコーディングは符号付き整数を符号なし整数に写像し、絶対値の小さな負の数も数バイトで収まるようにする。Varintと組み合わせると効率的な可変長符号化が得られる。

目的

可変長符号化の下で、小さな負の数(-1など)を小さな正の数と同じくらいコンパクトにし、2の補数での上位ビット全て1による膨張を避ける。

メカニズム

写像規則は n ≥ 0 → 2n、n < 0 → 2|n| - 1、つまり 0→0、-1→1、1→2、-2→3、2→4… と絶対値順に交互に並ぶため、小さな値は小さな符号なし数に対応する。

ユースケース

  • Protobufのsint32/sint64エンコーディング
  • コンパクトな符号付き整数のシリアライズ
  • データベースの可変長符号付きカラム

関連ツール

References