ビット演算

Luaでビット演算するには、bitlibを使う。bitlibはC言語で書かれたライブラリでソースはかなり簡潔です。
bits.lua

#!/bin/env lua

require("bit")
function pbits(byte)
    io.write " "
    for i=63, 0, -1 do
        io.write(bit.band(bit.arshift(byte,i), 1))
    end
    io.write(" " .. byte .."\n")
end

i = 0xffff                pbits(i)
i = bit.band(i, 0xf0f0)   pbits(i)
i = bit.bnot(i)           pbits(i)
i = bit.bor(i, 0xffff)    pbits(i)
i = bit.bxor(i, 0xffff)   pbits(i)
i = bit.arshift(i, 5)     pbits(i)
i = bit.bnot(i)           pbits(i)
i = bit.lshift(i, 3)      pbits(i)
i = bit.rshift(i, 5)      pbits(i)
i = bit.mod(i, 0xff)      pbits(i)

実行例

$ ./bits.lua
 0000000000000000000000000000000000000000000000001111111111111111 65535
 0000000000000000000000000000000000000000000000001111000011110000 61680
 1111111111111111111111111111111111111111111111110000111100001111 -61681
 1111111111111111111111111111111111111111111111111111111111111111 -1
 1111111111111111111111111111111111111111111111110000000000000000 -65536
 1111111111111111111111111111111111111111111111111111100000000000 -2048
 0000000000000000000000000000000000000000000000000000011111111111 2047
 0000000000000000000000000000000000000000000000000011111111111000 16376
 0000000000000000000000000000000000000000000000000000000111111111 511
 0000000000000000000000000000000000000000000000000000000000000001 1