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