otclient-redemption/modules/corelib/bitwise.lua

50 lines
1,015 B
Lua
Raw Permalink Normal View History

Bit = {}
function Bit.bit(p)
return 2 ^ (p - 1)
end
function Bit.hasBit(x, p)
return x % (p + p) >= p
end
function Bit.setbit(x, p)
return Bit.hasBit(x, p) and x or x + p
end
function Bit.clearbit(x, p)
return Bit.hasBit(x, p) and x - p or x
end
function Bit.bxor(a, b)
local result = 0
local bitVal = 1
while a > 0 and b > 0 do
local aMod = a % 2
local bMod = b % 2
if aMod ~= bMod then
result = result + bitVal
end
a = math.floor(a * 0.5)
b = math.floor(b * 0.5)
bitVal = bitVal * 2
end
result = result + (a + b) * bitVal
return result
end
function Bit.band(a, b)
local result = 0
local bitVal = 1
while a > 0 and b > 0 do
local aMod = a % 2
local bMod = b % 2
if aMod == 1 and bMod == 1 then
result = result + bitVal
end
a = math.floor(a * 0.5)
b = math.floor(b * 0.5)
bitVal = bitVal * 2
end
return result
end