Bitwise — Elixir v1.16.3

Search documentation of Elixir

# View Source Bitwise (Elixir v1.16.3)

A set of functions that perform calculations on bits.

All bitwise functions work only on integers; otherwise an `ArithmeticError` is raised. The functions `band/2`, `bor/2`, `bsl/2`, and `bsr/2` also have operators, respectively: `&&&/2`, `|||/2`, `<<</2`, and `>>>/2`.

## Guards

All bitwise functions can be used in guards:

    iex> odd? = fn
    ...>   int when Bitwise.band(int, 1) == 1 -> true
    ...>   _ -> false
    ...> end
    iex> odd?.(1)
    true

All functions in this module are inlined by the compiler.

# Summary

## Guards

left &&& right

Bitwise AND operator.

left <<< right

Arithmetic left bitshift operator.

left >>> right

Arithmetic right bitshift operator.

band(left, right)

Calculates the bitwise AND of its arguments.

bnot(expr)

Calculates the bitwise NOT of the argument.

bor(left, right)

Calculates the bitwise OR of its arguments.

bsl(left, right)

Calculates the result of an arithmetic left bitshift.

bsr(left, right)

Calculates the result of an arithmetic right bitshift.

bxor(left, right)

Calculates the bitwise XOR of its arguments.

left ||| right

Bitwise OR operator.

# Guards

Link to this function

# left &&& right

View Source

    @spec integer() &&& integer() :: integer()

Bitwise AND operator.

Calculates the bitwise AND of its arguments.

Allowed in guard tests. Inlined by the compiler.

## Examples

    iex> 9 &&& 3
    1

Link to this function

# left <<< right

View Source

    @spec integer() <<< integer() :: integer()

Arithmetic left bitshift operator.

Calculates the result of an arithmetic left bitshift.

Allowed in guard tests. Inlined by the compiler.

## Examples

    iex> 1 <<< 2
    4

    iex> 1 <<< -2
    0

    iex> -1 <<< 2
    -4

    iex> -1 <<< -2
    -1

Link to this function

# left >>> right

View Source

    @spec integer() >>> integer() :: integer()

Arithmetic right bitshift operator.

Calculates the result of an arithmetic right bitshift.

Allowed in guard tests. Inlined by the compiler.

## Examples

    iex> 1 >>> 2
    0

    iex> 1 >>> -2
    4

    iex> -1 >>> 2
    -1

    iex> -1 >>> -2
    -4

Link to this function

# band(left, right)

View Source

    @spec band(integer(), integer()) :: integer()

Calculates the bitwise AND of its arguments.

Allowed in guard tests. Inlined by the compiler.

## Examples

    iex> band(9, 3)
    1

Link to this function

# bnot(expr)

View Source

    @spec bnot(integer()) :: integer()

Calculates the bitwise NOT of the argument.

Allowed in guard tests. Inlined by the compiler.

## Examples

    iex> bnot(2)
    -3

    iex> bnot(2) &&& 3
    1

Link to this function

# bor(left, right)

View Source

    @spec bor(integer(), integer()) :: integer()

Calculates the bitwise OR of its arguments.

Allowed in guard tests. Inlined by the compiler.

## Examples

    iex> bor(9, 3)
    11

Link to this function

# bsl(left, right)

View Source

    @spec bsl(integer(), integer()) :: integer()

Calculates the result of an arithmetic left bitshift.

Allowed in guard tests. Inlined by the compiler.

## Examples

    iex> bsl(1, 2)
    4

    iex> bsl(1, -2)
    0

    iex> bsl(-1, 2)
    -4

    iex> bsl(-1, -2)
    -1

Link to this function

# bsr(left, right)

View Source

    @spec bsr(integer(), integer()) :: integer()

Calculates the result of an arithmetic right bitshift.

Allowed in guard tests. Inlined by the compiler.

## Examples

    iex> bsr(1, 2)
    0

    iex> bsr(1, -2)
    4

    iex> bsr(-1, 2)
    -1

    iex> bsr(-1, -2)
    -4

Link to this function

# bxor(left, right)

View Source

    @spec bxor(integer(), integer()) :: integer()

Calculates the bitwise XOR of its arguments.

Allowed in guard tests. Inlined by the compiler.

## Examples

    iex> bxor(9, 3)
    10

Link to this function

# left ||| right

View Source

    @spec integer() ||| integer() :: integer()

Bitwise OR operator.

Calculates the bitwise OR of its arguments.

Allowed in guard tests. Inlined by the compiler.

## Examples

    iex> 9 ||| 3
    11