【Common-Lisp】ash関数でビットシフト
ビットシフトのためのash関数についてのメモです。
ash関数
ash関数はビットシフトを行うLispの組み込み関数。
第1引数に数値を渡し、これをビットシフトの対象とする。
第2引数で左右どちらにシフトするかを指定する。第2引数が1のとき、左にシフト。-1の時、右にシフト。Lispの整数は上限を持たないので、右シフトの場合のみ、溢れたビットが捨てられる。
例えば、10進法の 11は2進法で1010。左シフトすると10110で、10進法では22。右シフトすると101で、10進法では5。
CL-USER> (ash 11 1) 22 CL-USER> (ash 11 -1) 5
左ビットシフトは2倍、右ビットシフトは2で割る(切り捨て)に対応する。
参考
コンラッド・バルスキ(2013)「Land of Lisp」 川合史郎訳 オライリー・ジャパン