查看源代码 按位运算 (Elixir v1.16.2)

一组用于对位进行计算的函数。

所有按位函数仅对整数有效;否则将引发 ArithmeticError。函数 band/2bor/2bsl/2bsr/2 也有运算符,分别为:&&&/2|||/2<<</2>>>/2.

守卫

所有按位函数都可以在守卫中使用

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

此模块中的所有函数都由编译器内联。

摘要

守卫

按位 AND 运算符。

算术左移位运算符。

算术右移位运算符。

计算其参数的按位 AND。

计算参数的按位 NOT。

计算其参数的按位 OR。

计算算术左移位的结果。

计算算术右移位的结果。

计算其参数的按位 XOR。

按位 OR 运算符。

守卫

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

按位 AND 运算符。

计算其参数的按位 AND。

允许在守卫测试中使用。由编译器内联。

示例

iex> 9 &&& 3
1
@spec integer() <<< integer() :: integer()

算术左移位运算符。

计算算术左移位的结果。

允许在守卫测试中使用。由编译器内联。

示例

iex> 1 <<< 2
4

iex> 1 <<< -2
0

iex> -1 <<< 2
-4

iex> -1 <<< -2
-1
@spec integer() >>> integer() :: integer()

算术右移位运算符。

计算算术右移位的结果。

允许在守卫测试中使用。由编译器内联。

示例

iex> 1 >>> 2
0

iex> 1 >>> -2
4

iex> -1 >>> 2
-1

iex> -1 >>> -2
-4
@spec band(integer(), integer()) :: integer()

计算其参数的按位 AND。

允许在守卫测试中使用。由编译器内联。

示例

iex> band(9, 3)
1
@spec bnot(integer()) :: integer()

计算参数的按位 NOT。

允许在守卫测试中使用。由编译器内联。

示例

iex> bnot(2)
-3

iex> bnot(2) &&& 3
1
@spec bor(integer(), integer()) :: integer()

计算其参数的按位 OR。

允许在守卫测试中使用。由编译器内联。

示例

iex> bor(9, 3)
11
@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
@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
@spec bxor(integer(), integer()) :: integer()

计算其参数的按位 XOR。

允许在守卫测试中使用。由编译器内联。

示例

iex> bxor(9, 3)
10
@spec integer() ||| integer() :: integer()

按位 OR 运算符。

计算其参数的按位 OR。

允许在守卫测试中使用。由编译器内联。

示例

iex> 9 ||| 3
11