Erlang 有几个运营商。对照、数学运算符、布尔运算符,旨在使这些类型的操作者的讨论,参考erlang文件,以样例说明。




Erlang的比較运算符


写法例如以下:




Expr1 op Expr2
1> 1 == 1.
true


op

Description

==

等于

/=

不等于

=<

小于或等于

<

小于

>=

大于或等于

>

大于

=:=

恒等于

=/=

恒不等于

以=:=和==为例,说明恒等于和等于的差别:


2> 1 == 1.0.true3> 1 =:= 1.0.false


不同类型比較会有什么结果?


针对不同数据类型比較。例如以下:



number < atom < reference < fun < port < pid < tuple < list < bit string


就是说,[] > 0结果是true




Erlang的数学运算符


有两种写法,例如以下:




op Expr
Expr1 op Expr2
4> + 1.
1
5> 1 + 1.
2


op

Description

Argument type

+

一元 +

number

-

一元 -

number

+

加法

number

-


减法


number

*


乘法


number

/

浮点除法

number

div


整数除法



integer


bnot

一元 not 位运算

integer

rem

整数求余

integer

band

与运算

integer

bor

或运算

integer

bxor

异或运算

integer

bsl

左移运算

integer

bsr

右移运算

integer

样例例如以下:



6> +1.
1
7> -1.
-1
8> 1+1.
2
9> 4/2.
2.0
10> 5 div 2.
2
11> 5 rem 2.
1
12> 2#10 band 2#01.
0
13> 2#10 bor 2#01.
3
14> 8 bsr 1.
4
15> 8 bsl 1.
16




Erlang的布尔运算符


写法例如以下:




op Expr
Expr1 op Expr2


op

Description

not

一元逻辑非

and

逻辑与

or

逻辑或

xor

逻辑异或

样例:



16> not true.
false
17> true and false.
false
18> true xor false.
true

另外。还有两个布尔运算符 orelse 和 andalso,这两个用于短路运算,写法例如以下:



Expr1 orelse Expr2
Expr1 andalso Expr2


什么是短路运算?

样例:

Expr1 and Expr2

Expr1 andalso Expr2

对于and运算,假设Expr1为假。还会继续运行Expr2,然后再判定表达式为假;而andalso运算,当Expr1为假就判定表达式为假,不再运行Expr2,所以这里andalso效率比較高。