#!/usr/local/bin/lua51 local bit = { } bit.rshift = function(value, bit) return math.floor(value / (2 ^ bit)) end bit.lshift = function(value, bit) return value * (2 ^ bit) end bit.band = function(a, b) local result = 0 local bitval = 1 while a > 0 and b > 0 do if (a % 2 == 1) and (b % 2 == 1) then result = result + bitval end a = math.floor(a / 2) b = math.floor(b / 2) bitval = bitval * 2 end return result end bit.bor = function(a, b) local result = 0 local shift = 1 while a > 0 or b > 0 do local r1 = a % 2 local r2 = b % 2 if r1 == 1 or r2 == 1 then result = result + shift end a = math.floor(a / 2) b = math.floor(b / 2) shift = shift * 2 end return result end bit.bytes = function(value) local bytes = { } if value == 0 then return { 0 } end while value > 0 do bytes[#bytes + 1] = value % 256 value = math.floor(value / 256) end return bytes end bit.nbytes = function(value, num) local bytes = { } num = num or 1 for i = 1, num do bytes[i] = value % 256 value = math.floor(value / 256) end return bytes end bit.align16bytes = function(value) return math.ceil(value / 16) * 16 end return bit