Lispでシフト演算をする
そのままズバリな名前の関数ではなかったのでメモ。ashという関数を使用する。
? (ash 32 5) 1024 ? (ash 23 2) 92 ? (ash 32 1) 64 ? (ash 64 -1) 32 ? (ash 32 -5) 1 ? (ash 32 -6) 0 ? (ash 32 -7) 0 ?
ashは引数を二つ取る。一つはもとになる数(この数に対してシフト演算をするという数)。二つ目は、何ビット分シフトさせるかという数。上記で言えば、32を5ビット分右にシフトさせると1024となっている。32は2の5乗。これを左に5ビットシフトさせればさらに5乗することになり、2の10乗になる。つまり、1024が返されている。右にシフトさせるには、二つ目の引数を負の数にしてやればよい。