Битовые операции
Набор функций для выполнения вычислений над битами.
Все битовые функции работают только с целыми числами; в противном случае возбуждается исключение ArithmeticError.
Функции в этом модуле доступны в двух формах: с именами или в виде операторов. Например:
iex> use Bitwise iex> bnot(1) # named -2 iex> 1 &&& 1 # operator 1
Если вы предпочитаете использовать только операторы или пропустить их, вы можете передать следующие параметры:
-
:only_operators— включает только операторы -
:skip_operators— пропускает операторы
Например:
iex> use Bitwise, only_operators: true iex> 1 &&& 1 1
При вызове без параметров, use Bitwise эквивалентно import Bitwise.
Все битовые функции могут быть использованы в сторожах:
iex> odd? = fn ...> int when Bitwise.band(int, 1) == 1 -> true ...> _ -> false ...> end iex> odd?.(1) true
Все функции в этом модуле инлайнят компилятор.
Краткое описание
Сторожа
- left &&& right
Инфиксный оператор; вычисляет побитовое И своих аргументов.
- left <<< right
Инфиксный оператор; вычисляет результат арифметического сдвига влево на несколько битов.
- left >>> right
Инфиксный оператор; вычисляет результат арифметического сдвига вправо на несколько битов.
- left ^^^ right
Инфиксный оператор; вычисляет побитовое исключающее ИЛИ своих аргументов.
- left ||| right
Инфиксный оператор; вычисляет побитовое ИЛИ своих аргументов.
- ~~~expr
Префиксный (унарный) оператор; вычисляет побитовое НЕ своего аргумента.
- band(left, right)
Вычисляет побитовое И своих аргументов.
- bnot(expr)
Вычисляет побитовое НЕ своего аргумента.
- bor(left, right)
Вычисляет побитовое ИЛИ своих аргументов.
- bsl(left, right)
Вычисляет результат арифметического сдвига влево на несколько битов.
- bsr(left, right)
Вычисляет результат арифметического сдвига вправо на несколько битов.
- bxor(left, right)
Вычисляет побитовое исключающее ИЛИ своих аргументов.
Сторожа
left &&& right
Specs
integer() &&& integer() :: integer()
Инфиксный оператор; вычисляет побитовое И своих аргументов.
Разрешено в тестах сторожей. Инлайнится компилятором.
Примеры
iex> 9 &&& 3 1
left <<< right
Specs
integer() <<< integer() :: integer()
Инфиксный оператор; вычисляет результат арифметического сдвига влево на несколько битов.
Разрешено в тестах сторожей. Инлайнится компилятором.
Примеры
iex> 1 <<< 2 4 iex> 1 <<< -2 0 iex> -1 <<< 2 -4 iex> -1 <<< -2 -1
left >>> right
Specs
integer() >>> integer() :: integer()
Инфиксный оператор; вычисляет результат арифметического сдвига вправо на несколько битов.
Разрешено в тестах сторожей. Инлайнится компилятором.
Примеры
iex> 1 >>> 2 0 iex> 1 >>> -2 4 iex> -1 >>> 2 -1 iex> -1 >>> -2 -4
left ^^^ right
Specs
integer() ^^^ integer() :: integer()
Инфиксный оператор; вычисляет побитовое исключающее ИЛИ своих аргументов.
Разрешено в тестах сторожей. Инлайнится компилятором.
Примеры
iex> 9 ^^^ 3 10
left ||| right
Specs
integer() ||| integer() :: integer()
Инфиксный оператор; вычисляет побитовое ИЛИ своих аргументов.
Разрешено в тестах сторожей. Инлайнится компилятором.
Примеры
iex> 9 ||| 3 11
~~~expr
Specs
~~~integer() :: integer()
Префиксный (унарный) оператор; вычисляет побитовое НЕ своего аргумента.
Разрешено в тестах сторожей. Инлайнится компилятором.
Примеры
iex> ~~~2 -3 iex> ~~~2 &&& 3 1
band(left, right)
Specs
band(integer(), integer()) :: integer()
Вычисляет побитовое И своих аргументов.
Разрешено в тестах сторожей. Инлайнится компилятором.
Примеры
iex> band(9, 3) 1
bnot(expr)
Specs
bnot(integer()) :: integer()
Вычисляет побитовое НЕ своего аргумента.
Разрешено в тестах сторожей. Инлайнится компилятором.
Примеры
iex> bnot(2) -3 iex> bnot(2) &&& 3 1
bor(left, right)
Specs
bor(integer(), integer()) :: integer()
Вычисляет побитовое ИЛИ своих аргументов.
Разрешено в тестах сторожей. Инлайнится компилятором.
Примеры
iex> bor(9, 3) 11
bsl(left, right)
Specs
bsl(integer(), integer()) :: integer()
Вычисляет результат арифметического сдвига влево на несколько битов.
Разрешено в тестах сторожей. Инлайнится компилятором.
Примеры
iex> bsl(1, 2) 4 iex> bsl(1, -2) 0 iex> bsl(-1, 2) -4 iex> bsl(-1, -2) -1
bsr(left, right)
Specs
bsr(integer(), integer()) :: integer()
Вычисляет результат арифметического сдвига вправо на несколько битов.
Разрешено в тестах сторожей. Инлайнится компилятором.
Примеры
iex> bsr(1, 2) 0 iex> bsr(1, -2) 4 iex> bsr(-1, 2) -1 iex> bsr(-1, -2) -4
bxor(left, right)
Specs
bxor(integer(), integer()) :: integer()
Вычисляет побитовое исключающее ИЛИ своих аргументов.
Разрешено в тестах сторожей. Инлайнится компилятором.
Примеры
iex> bxor(9, 3) 10
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.10.4/Bitwise.html