基本的なビット演算をする - lisp-cookbook-ja/common-lisp GitHub Wiki
- log*系関数
整数値を2進数として扱い、ビット演算をする関数にはlogand などがあります。
(logand #b0110 #b1101) ;=> 4 = #b0100
(logior #b0110 #b1101) ;=> 15 = #b1111
(logxor #b0110 #b1101) ;=> 11 = #b1011
log*系の関数には次のようなものがあります
logand | AND演算 |
---|---|
logandc1 | (logandc1 n1 n2) == (logand (lognot n1) n2) |
logandc2 | (logandc2 n1 n2) == (logand n1 (lognot n2)) |
logeqv | Exclusive NOR演算 |
logior | OR演算 |
lognand | NAND演算 |
lognor | NOR演算 |
lognot | NOT演算 |
logorc1 | (logorc1 n1 n2) == (logior (lognot n1) n2) |
logorc2 | (logorc2 n1 n2) == (logior n1 (lognot n2)) |
logxor | XOR演算 |
boole 関数
log*系関数によってできるビット演算を、boole関数から呼び出すことができます。 第二引数に演算を指定し、引数となる2つの整数を用いた論理演算を行います。
(boole boole-and #b0110 #b1101) ;=> 4 = #b0100
(boole boole-ior #b0110 #b1101) ;=> 15 = #b1111
(boole boole-xor #b0110 #b1101) ;=> 11 = #b1011
演算には次のような種類があります
演算 | 結果 |
---|---|
boole-1 | 引数1を返します |
boole-2 | 引数2を返します |
boole-and | AND演算 |
boole-andc1 | logandc1 と同じ |
boole-andc2 | logandc2 と同じ |
boole-c1 | 引数1の補数を返します |
boole-c2 | 引数2の補数を返します |
boole-clr | 常に0を返します(すべてのビットが0である) |
boole-eqv | Exclusive NOR演算 |
boole-ior | OR演算 |
boole-nand | NAND演算 |
boole-nor | NOR演算 |
boole-orc1 | logorc1 と同じ |
boole-orc2 | logorc2 と同じ |
boole-set | 常に-1を返します(すべてのビットが1である) |
boole-xor | XOR演算 |