Erlang 运算符

运算符是告诉编译器执行特定数学或逻辑操作的符号。

Erlang 有以下类型的运算符

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符

算术运行符

Erlang 语言支持正常的算术运算符类似于在其它语言中。以下是在 Erlang 中可用的算术运算符。

操作符描述示例
+两个操作数相加1 + 2 = 3
从第一个操作数减去第二个操作数1 - 2 = -1
两个操作数相乘2 2 = 4
/ 通过分子除以分母 2 / 2 = 1
rem 第二数除以第一数的余数 3 rem 2 = 1
div div组件将执行除法并返回整数部分 3 div 2 = 1

下面的代码片段显示了各个运算符的使用。

示例

  1. -module(helloworld).
  2. -export([start/0]).
  3. start() ->
  4. X = 40,
  5. Y = 50,
  6. Res1 = X + Y,
  7. Res2 = X - Y,
  8. Res3 = X * Y,
  9. Res4 = X / Y,
  10. Res5 = X div Y,
  11. Res6 = X rem Y,
  12. io:fwrite("~w~n",[Res1]),
  13. io:fwrite("~w~n",[Res2]),
  14. io:fwrite("~w~n",[Res3]),
  15. io:fwrite("~w~n",[Res4]),
  16. io:fwrite("~w~n",[Res5]),
  17. io:fwrite("~w~n",[Res6]).

执行上面的代码将会得到以下结果:

  1. 90
  2. -10
  3. 2000
  4. 0.8
  5. 0
  6. 40

关系运算符

关系运算符允许对象比较。以下是在 Erlang 可用的关系运算符。

操作符描述示例
==测试两个对象是否相等2 = 2 结果为 true
/=测试两个对象是否为不相等3 /= 2 结果为 true
<测试左边对象是否小于右边操作对象2 < 3 结果为 true
=<测试左边对象是否小于或等于右边操作对象2 =<3 结果为 true
>测试左边对象是否大于右边操作对象3 > 2 结果为 true
>=测试左边对象是否大于或等于右边操作对象3 >= 2 结果为 true

下面的代码片段显示了各个运算符的使用。

示例

  1. -module(helloworld).-export([start/0]).
  2. start()->
  3. io:fwrite("~w~n",[3==2]),
  4. io:fwrite("~w~n",[3/=2]),
  5. io:fwrite("~w~n",[3<2]),
  6. io:fwrite("~w~n",[3=<2]),
  7. io:fwrite("~w~n",[3>2]),
  8. io:fwrite("~w~n",[3>=2]).

执行上面的代码,输出结果如下:

  1. false
  2. true
  3. false
  4. false
  5. true
  6. true

逻辑运算符

这些逻辑运算符用于计算布尔表达式。以下是在 Erlang 可用的逻辑运算。

操作符描述示例
or逻辑 “或”操作符true 或 true 结果为 true
and逻辑 “与”操作符True 与 false 结果为 false
not逻辑 “非”操作符非 false 结果为 true
xor逻辑 “异或”操作符True异或 false 结果为 false

下面的代码片段显示了各个运算符的使用。

实例

  1. -module(helloworld).-export([start/0]).
  2. start()->
  3. io:fwrite("~w~n",[trueorfalse]),
  4. io:fwrite("~w~n",[trueandfalse]),
  5. io:fwrite("~w~n",[true xor false]),
  6. io:fwrite("~w~n",[notfalse]).

执行上面的代码,输出结果如下:

  1. true
  2. false
  3. true
  4. true

位运算符

Erlang提供四个位运算符。以下是在 Erlang 可用的位运算符。

S.No.操作符 & 描述
1 band 位 “and”运算符
2 bor 位 “or” 运算符
3 bxor 位 “xor”或异运算符
4 bnot 按位反运算符

以下是这些运算符真值表显示 -

pqp & qp | qp ^ q
00000
01011
11110
10011

下面的代码片段显示了各个运算符的使用。

实例

  1. -module(helloworld).
  2. -export([start/0]).
  3. start() ->
  4. io:fwrite("~w~n",[00111100 band 00001101]),
  5. io:fwrite("~w~n",[00111100 bxor 00111100]),
  6. io:fwrite("~w~n",[bnot 00111100]),
  7. io:fwrite("~w~n",[00111100 bor 00111100]).

执行上面的代码,输出结果如下:

  1. 76
  2. 0
  3. -111101
  4. 111100

运算符优先级

下表显示了Erlang中运算符优先级,以及它们一起关联递减优先顺序。运算符优先级用来确定在不带括号表达式的计算顺序。

运算符关联
:
#
bnot,not
/,*,div,rem,band,and左关联
+,-,bor,bxor,or,xor左关联
==,/=,=<,<,>=,>