Lua5.1 自己实现位运算
local function BitOR(a,b)--Bitwise or
local p,c=1,0
while a+b>0 do
local ra,rb=a%2,b%2
if ra+rb>0 then c=c+p end
a,b,p=(a-ra)/2,(b-rb)/2,p*2
end
return c
end
local function BitNOT(n)
local p,c=1,0
while n>0 do
local r=n%2
if r<1 then c=c+p end
n,p=(n-r)/2,p*2
end
return c
end
local function BitAND(a,b)--Bitwise and
local p,c=1,0
while a>0 and b>0 do
local ra,rb=a%2,b%2
if ra+rb>1 then c=c+p end
a,b,p=(a-ra)/2,(b-rb)/2,p*2
end
return c
end
代码来自 https://stackoverflow.com/questions/5977654/lua-bitwise-logical-operations
@Trey Reynolds
lua不同版本的位操作
5.1 使用外部bitlib库(需要bitlib.dll)
命令行范例
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> require "bit"
> a=12
> b=9
> print(bit.band(a,b))
8
> print(bit.bor(a,b))
13
> print(bit.bxor(a,b))
5
> print(bit.bnot(a))
-13
> print(bit.rshift(a,2))
3
> print(bit.lshift(b,3))
72
5.2 使用内置bit32库
命令行范例
Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> require "bit32"
> a=12
> b=9
> print(bit32.band(a,b))
8
> print(bit32.bor(a,b))
13
> print(bit32.bxor(a,b))
5
> print(bit32.bnot(a))
4294967283
> print(bit32.rshift(a,2))
3
> print(bit32.lshift(b,3))
72
> =bit32.lshift(b,3)
72
5.3 使用内置操作符
命令行范例
Lua 5.3.3 Copyright (C) 1994-2016 Lua.org, PUC-Rio
> a=12
> b=9
> a & b
8
> a | b
13
> a ~ b
5
> ~ a
-13
> a >> 2
3
> b << 3
72