# `Varint.Zigzag`
[🔗](https://github.com/ahamez/varint/blob/main/lib/varint/zigzag.ex#L1)

This module provides functions to work with signed integers in conjunction with
LEB128 encoding.

# `decode`

```elixir
@spec decode(non_neg_integer()) :: integer()
```

  Decodes an unsigned integer into a signed integer.

    iex> Varint.Zigzag.decode(0)
    0

    iex> Varint.Zigzag.decode(1)
    -1

    iex> Varint.Zigzag.decode(2)
    1

    iex> Varint.Zigzag.decode(3)
    -2

    iex> Varint.Zigzag.decode(4294967294)
    2147483647

    iex> Varint.Zigzag.decode(4294967295)
    -2147483648

# `encode`

```elixir
@spec encode(integer()) :: non_neg_integer()
```

  Encodes a signed integer into an unsigned integer suitable for LEB128 encoding.

    iex> Varint.Zigzag.encode(0)
    0

    iex> Varint.Zigzag.encode(-1)
    1

    iex> Varint.Zigzag.encode(1)
    2

    iex> Varint.Zigzag.encode(-2)
    3

    iex> Varint.Zigzag.encode(-2147483648)
    4294967295

    iex> Varint.Zigzag.encode(2147483647)
    4294967294

---

*Consult [api-reference.md](api-reference.md) for complete listing*
