跳轉到內容

Erlang 程式設計/位語法

來自華夏公益教科書,開放的書籍,面向開放的世界

Erlang 允許我們使用位串。它們具有以下形式

<<Value:Bitlength>> or <<v1:length1,v2:length2,...>>

預設位長度為 8。

65> <<1:8>> == <<1>>. 
true

位串中使用的整數可以在左側用零填充。

66> <<1:8>> == <<00000001>>. 
true

一些位串具有字串表示形式。

38> <<00011111>>.
<<"g">>

請記住,使用預設位長度會導致過大整數被截斷!

39> <<"g">> == <<103>>.
true
40> <<00011111>> == <<103>>.
true
41> <<00011111:8>> == <<103>>.
true
42> <<00011111:16>> == <<43, 103>>.
true
43> <<00011111:24>> == <<0, 43, 103>>.
true
44> <<00011111:32>> == <<0, 0, 43, 103>>.
true

我們無法使用整數指定單個位。我們必須使用位長度為 1 的值。

67> <<0101>>.
<<"e">>
68> <<1:1, 0:1, 1:1>>.
<<5:3>>
69> <<0101>> == <<1:1, 0:1, 1:1>>.
false
70> <<101>> == <<1:1, 0:1, 1:1>>.
false
71> <<1:1, 0:1, 1:1>> == <<5:3>>.
true
72> <<0:5, 1:1, 0:1, 1:1>>.
<<5>>
73> <<0:5, 1:1, 0:1, 1:1>> == <<0101>>.
false

我們可以使用模式匹配選擇位串的一部分。

45> <<H:2,T:6>> = <<"A">>. 
<<"A">>
46> H. 
1
47> T.
1 
86> <<01000001:8>> == <<"A">>.
true
87> <<1:2,1:6>> == <<"A">>.
true
88> <<65>> == <<"A">>.
true

我們可以將 X 與值匹配。

95> <<1:2,X:6>> = <<"A">>. 
<<"A">>
96> X.
1

我們無法將 Y 與位長度匹配。

97> <<1:2,1:Y>> = <<"A">>.
** 1: variable 'Y' is unbound **

我們可以使用繫結變數作為位長度。

98> Z = 6.
6
99> <<1:2,X:Z>> = <<"A">>.
<<"A">>
100> X.
1
華夏公益教科書