Hatena::Grouperlang

msyktの日記

 | 

2013-12-14

5.3 ビット構文

22:56

変数Mの16ビットメモリ領域に3つの変数X,Y,Zをパックしたいとしよう。Mの中でXは3ビット、Yは7ビット、Zは6ビットを占めるものとする。ほとんどの言語ではビットシフトとビットマスクを駆使した面倒な低レベル操作が必要だが、Erlangならば次のように書くだけでよい。

M = <<X:3, Y:7, Z:6>>

簡単だ!

これは面白い。試してみる。

Eshell V5.10.3  (abort with ^G)
1> X=5,Y=12,Z=34.
34
2> M = <<X:5, Y:5, Z:5>>.
<<43,2:7>>
3> <<Rx:5, Ry:5, Rz:5>> = M.
<<43,2:7>>
4> Rx.
5
5> Ry.
12
6> Rz.
2

あれ、Rzの値がおかしい…と思って良く見たら、2^5=32を超えた値を設定したからか。

7> N = <<X:5, Y:5, Z:6>>.   
<<"+\"">>
9> <<Sx:5, Sy:5, Sz:6>> = N.
<<"+\"">>
10> Sx.
5
11> Sy.
12
12> Sz.
34

これは便利だ。

 |