OCamlでビット演算
ビット演算関数
OCamlでビット演算を行う場合は以下のビット演算関数を利用して行う。
ビット論理積
land
ビット論理和
lor
ビット排他的論理和
lxor
ビット論理否定
lnot
論理左シフト
lsl
論理右シフト(Logical Shi)
lsr
算術右シフト(Arithmetic Shift Right)
asr
使い方
code:ocaml
(* AND *)
utop # let x = 0xFF00 land 0xF0F0 in Printf.printf "%0X\n" x;;
F000
(* OR *)
utop # let x = 0xFF00 lor 0xF0F0 in Printf.printf "%0X\n" x;;
FFF0
(* XOR *)
utop # let x = 0xFF00 lxor 0xF0F0 in Printf.printf "%04X\n" x;;
0FF0
(* NOT。なんか不思議な結果が返るような... *)
utop # let x = lnot 0xF0F0 in Printf.printf "%04X\n" x;;
7FFFFFFFFFFF0F0F
(* これなら良さそう *)
utop # let x = (lnot 0xF0F0) land 0xFFFF in Printf.printf "%04X\n" x;;
0F0F
(* 論理左シフト *)
utop # let x = 0x00FF lsl 4 in Printf.printf "%04X\n" x;;
0FF0
- : unit = ()
(* 論理右シフト *)
utop # let x = 0xFF00 lsr 4 in Printf.printf "%04X\n" x;;
0FF0
(* 算術右シフト *)
utop # let x = 64 asr 3 in Printf.printf "%d\n" x;;
8
- : unit = ()
utop # let x = -64 asr 3 in Printf.printf "%d\n" x;;
-8
- : unit = ()
参考
StdlibモジュールのBitwise operationsを参照