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 |
下面的代码片段显示了各个运算符的使用。
示例
-module(helloworld).
-export([start/0]).
start() ->
X = 40,
Y = 50,
Res1 = X + Y,
Res2 = X - Y,
Res3 = X * Y,
Res4 = X / Y,
Res5 = X div Y,
Res6 = X rem Y,
io:fwrite("~w~n",[Res1]),
io:fwrite("~w~n",[Res2]),
io:fwrite("~w~n",[Res3]),
io:fwrite("~w~n",[Res4]),
io:fwrite("~w~n",[Res5]),
io:fwrite("~w~n",[Res6]).
执行上面的代码将会得到以下结果:
90
-10
2000
0.8
0
40
关系运算符
关系运算符允许对象比较。以下是在 Erlang 可用的关系运算符。
操作符 | 描述 | 示例 |
---|---|---|
== | 测试两个对象是否相等 | 2 = 2 结果为 true |
/= | 测试两个对象是否为不相等 | 3 /= 2 结果为 true |
< | 测试左边对象是否小于右边操作对象 | 2 < 3 结果为 true |
=< | 测试左边对象是否小于或等于右边操作对象 | 2 =<3 结果为 true |
> | 测试左边对象是否大于右边操作对象 | 3 > 2 结果为 true |
>= | 测试左边对象是否大于或等于右边操作对象 | 3 >= 2 结果为 true |
下面的代码片段显示了各个运算符的使用。
示例
-module(helloworld).-export([start/0]).
start()->
io:fwrite("~w~n",[3==2]),
io:fwrite("~w~n",[3/=2]),
io:fwrite("~w~n",[3<2]),
io:fwrite("~w~n",[3=<2]),
io:fwrite("~w~n",[3>2]),
io:fwrite("~w~n",[3>=2]).
执行上面的代码,输出结果如下:
false
true
false
false
true
true
逻辑运算符
这些逻辑运算符用于计算布尔表达式。以下是在 Erlang 可用的逻辑运算。
操作符 | 描述 | 示例 |
---|---|---|
or | 逻辑 “或”操作符 | true 或 true 结果为 true |
and | 逻辑 “与”操作符 | True 与 false 结果为 false |
not | 逻辑 “非”操作符 | 非 false 结果为 true |
xor | 逻辑 “异或”操作符 | True异或 false 结果为 false |
下面的代码片段显示了各个运算符的使用。
实例
-module(helloworld).-export([start/0]).
start()->
io:fwrite("~w~n",[trueorfalse]),
io:fwrite("~w~n",[trueandfalse]),
io:fwrite("~w~n",[true xor false]),
io:fwrite("~w~n",[notfalse]).
执行上面的代码,输出结果如下:
true
false
true
true
位运算符
Erlang提供四个位运算符。以下是在 Erlang 可用的位运算符。
S.No. | 操作符 & 描述 |
---|---|
1 | band 位 “and”运算符 |
2 | bor 位 “or” 运算符 |
3 | bxor 位 “xor”或异运算符 |
4 | bnot 按位反运算符 |
以下是这些运算符真值表显示 -
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
下面的代码片段显示了各个运算符的使用。
实例
-module(helloworld).
-export([start/0]).
start() ->
io:fwrite("~w~n",[00111100 band 00001101]),
io:fwrite("~w~n",[00111100 bxor 00111100]),
io:fwrite("~w~n",[bnot 00111100]),
io:fwrite("~w~n",[00111100 bor 00111100]).
执行上面的代码,输出结果如下:
76
0
-111101
111100
运算符优先级
下表显示了Erlang中运算符优先级,以及它们一起关联递减优先顺序。运算符优先级用来确定在不带括号表达式的计算顺序。
运算符 | 关联 |
---|---|
: | |
# | |
bnot,not | |
/,*,div,rem,band,and | 左关联 |
+,-,bor,bxor,or,xor | 左关联 |
==,/=,=<,<,>=,> |