Saltar al contenido
uencoder

ZigZag Encoding

La codificación ZigZag mapea enteros con signo a enteros sin signo, de modo que los números negativos de pequeña magnitud también ocupen pocos bytes; combinada con Varint produce una codificación de longitud variable eficiente.

Propósito

Hace que los números negativos pequeños (como -1) sean tan compactos como los positivos pequeños bajo codificación de longitud variable, evitando la expansión causada por los bits altos en uno del complemento a dos.

Mecanismo

La regla de mapeo: n ≥ 0 → 2n, y n < 0 → 2|n| - 1 — es decir, 0→0, -1→1, 1→2, -2→3, 2→4... Los enteros se alternan por valor absoluto, así que los valores pequeños corresponden a números sin signo pequeños.

Casos de uso

  • Codificación sint32/sint64 de Protobuf
  • Serialización compacta de enteros con signo
  • Columnas con signo de longitud variable en bases de datos

Herramientas relacionadas

References