プログラミング原人の進化ログ

プログラミング原人の進化論

オレ プログラミング ベンキョウ スル。マナンダ コト カク。

【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」 川合史郎訳 オライリー・ジャパン