Spec-Zone.ru › Elixir 1.13

Битовые операции

Набор функций, выполняющих вычисления над битами.

Все битовые функции работают только с целыми числами; в противном случае генерируется исключение 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

Оператор арифметического сдвига вправо.

band(left, right)

Вычисляет побитовое И своих аргументов.

bnot(expr)

Вычисляет побитовое НЕ аргумента.

bor(left, right)

Вычисляет побитовое ИЛИ своих аргументов.

bsl(left, right)

Вычисляет результат арифметического сдвига влево.

bsr(left, right)

Вычисляет результат арифметического сдвига вправо.

bxor(left, right)

Вычисляет побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ своих аргументов.

left ||| right

Оператор побитового ИЛИ.

~~~expr

Унарный оператор побитового НЕ.

Условия

left &&& rightSource

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

Оператор побитового И.

Вычисляет побитовое И своих аргументов.

Допускается в условиях. Инлайнится компилятором.

Примеры

iex> 9 &&& 3
1

left <<< rightSource

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

Оператор арифметического сдвига влево.

Вычисляет результат арифметического сдвига влево.

Допускается в условиях. Инлайнится компилятором.

Примеры

iex> 1 <<< 2
4

iex> 1 <<< -2
0

iex> -1 <<< 2
-4

iex> -1 <<< -2
-1

left >>> rightSource

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

Оператор арифметического сдвига вправо.

Вычисляет результат арифметического сдвига вправо.

Допускается в условиях. Инлайнится компилятором.

Примеры

iex> 1 >>> 2
0

iex> 1 >>> -2
4

iex> -1 >>> 2
-1

iex> -1 >>> -2
-4

band(left, right)Source

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

Вычисляет побитовое И своих аргументов.

Допускается в условиях. Инлайнится компилятором.

Примеры

iex> band(9, 3)
1

bnot(expr)Source

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

Вычисляет побитовое НЕ аргумента.

Допускается в условиях. Инлайнится компилятором.

Примеры

iex> bnot(2)
-3

iex> bnot(2) &&& 3
1

bor(left, right)Source

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

Вычисляет побитовое ИЛИ своих аргументов.

Допускается в условиях. Инлайнится компилятором.

Примеры

iex> bor(9, 3)
11

bsl(left, right)Source

@spec 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)Source

@spec 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)Source

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

Вычисляет побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ своих аргументов.

Допускается в условиях. Инлайнится компилятором.

Примеры

iex> bxor(9, 3)
10

left ||| rightSource

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

Оператор побитового ИЛИ.

Вычисляет побитовое ИЛИ своих аргументов.

Допускается в условиях. Инлайнится компилятором.

Примеры

iex> 9 ||| 3
11

~~~exprSource

@spec ~~~integer() :: integer()

Унарный оператор побитового НЕ.

Вычисляет побитовое НЕ аргумента.

Допускается в условиях. Инлайнится компилятором.

Примеры

iex> ~~~2
-3

iex> ~~~2 &&& 3
1

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.13.4/Bitwise.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API