lua 中的 bit extend 库 (可能仅对非负数有效)
来源:互联网 发布:巨杉数据库 创始人 编辑:程序博客网 时间:2024/06/05 21:16
-- bit operation
bit = bit or {}
bit.data32 = {}
for i=1,32 do
bit.data32[i]=2^(32-i)
end
function bit._b2d(arg)
local nr=0
for i=1,32 do
if arg[i] ==1 then
nr=nr+bit.data32[i]
end
end
return nr
end
function bit._d2b(arg)
arg = arg >= 0 and arg or (0xFFFFFFFF + arg + 1)
local tr={}
for i=1,32 do
if arg >= bit.data32[i] then
tr[i]=1
arg=arg-bit.data32[i]
else
tr[i]=0
end
end
return tr
end
function bit._and(a,b)
local op1=bit._d2b(a)
local op2=bit._d2b(b)
local r={}
for i=1,32 do
if op1[i]==1 and op2[i]==1 then
r[i]=1
else
r[i]=0
end
end
return bit._b2d(r)
end
function bit._xor(a,b)
local op1 = bit._d2b(a)
local op2 = bit._d2b(b)
local r={}
for i = 1,32 do
if op1[i] == 0 then
r[i] = op2[i]
else
if op2[i] == 0 then
r[i] = 1
else
r[i] = 0
end
end
end
return bit._b2d(r)
end
function bit._rshift(a,n)
local op1=bit._d2b(a)
n = n <= 32 and n or 32
n = n >= 0 and n or 0
for i=32, n+1, -1 do
op1[i] = op1[i-n]
end
for i=1, n do
op1[i] = 0
end
return bit._b2d(op1)
end
function bit._lshift(a,n)
local op1 =bit._d2b(a)
n = n <= 32 and n or 32
n = n >= 0 and n or 0
for i = 1, 32 - n do
op1[i] = op1[i + n]
end
for i = 32 - n + 1, 32 do
op1[i] = 0
end
return bit_b2d(op1)
end
function bit._not(a)
local op1=bit._d2b(a)
local r={}
for i=1,32 do
if op1[i]==1 then
r[i]=0
else
r[i]=1
end
end
return bit._b2d(r)
end
function bit._or(a,b)
local op1=bit._d2b(a)
local op2=bit._d2b(b)
local r={}
for i=1,32 do
if op1[i]==1 or op2[i]==1 then
r[i]=1
else
r[i]=0
end
end
return bit._b2d(r)
end
bit.band = bit.band or bit._and
bit.rshift = bit.rshift or bit._rshift
bit.bnot = bit.bnot or bit._not
bit.lshift = bit.lshift or bit._lshift
bit.xor = bit.xor or bit._xor
bit = bit or {}
bit.data32 = {}
for i=1,32 do
bit.data32[i]=2^(32-i)
end
function bit._b2d(arg)
local nr=0
for i=1,32 do
if arg[i] ==1 then
nr=nr+bit.data32[i]
end
end
return nr
end
function bit._d2b(arg)
arg = arg >= 0 and arg or (0xFFFFFFFF + arg + 1)
local tr={}
for i=1,32 do
if arg >= bit.data32[i] then
tr[i]=1
arg=arg-bit.data32[i]
else
tr[i]=0
end
end
return tr
end
function bit._and(a,b)
local op1=bit._d2b(a)
local op2=bit._d2b(b)
local r={}
for i=1,32 do
if op1[i]==1 and op2[i]==1 then
r[i]=1
else
r[i]=0
end
end
return bit._b2d(r)
end
function bit._xor(a,b)
local op1 = bit._d2b(a)
local op2 = bit._d2b(b)
local r={}
for i = 1,32 do
if op1[i] == 0 then
r[i] = op2[i]
else
if op2[i] == 0 then
r[i] = 1
else
r[i] = 0
end
end
end
return bit._b2d(r)
end
function bit._rshift(a,n)
local op1=bit._d2b(a)
n = n <= 32 and n or 32
n = n >= 0 and n or 0
for i=32, n+1, -1 do
op1[i] = op1[i-n]
end
for i=1, n do
op1[i] = 0
end
return bit._b2d(op1)
end
function bit._lshift(a,n)
local op1 =bit._d2b(a)
n = n <= 32 and n or 32
n = n >= 0 and n or 0
for i = 1, 32 - n do
op1[i] = op1[i + n]
end
for i = 32 - n + 1, 32 do
op1[i] = 0
end
return bit_b2d(op1)
end
function bit._not(a)
local op1=bit._d2b(a)
local r={}
for i=1,32 do
if op1[i]==1 then
r[i]=0
else
r[i]=1
end
end
return bit._b2d(r)
end
function bit._or(a,b)
local op1=bit._d2b(a)
local op2=bit._d2b(b)
local r={}
for i=1,32 do
if op1[i]==1 or op2[i]==1 then
r[i]=1
else
r[i]=0
end
end
return bit._b2d(r)
end
bit.band = bit.band or bit._and
bit.rshift = bit.rshift or bit._rshift
bit.bnot = bit.bnot or bit._not
bit.lshift = bit.lshift or bit._lshift
bit.xor = bit.xor or bit._xor
0 0
- lua 中的 bit extend 库 (可能仅对非负数有效)
- cv::waitkey()仅对OpenCV窗口有效
- ExecuteNonQuery()仅对增删改有效
- javascript控制网页缩放(仅对IE有效)
- #pragma (4) 仅对其后定义的结构体有效
- connection limit仅对非superuser起作用,对superuser不起作用
- 对非负数排序n编码为p(n),编码要求如下:对于n,m ,n < m当且仅当p(n) 按字典顺序小于p(m),并且p(n)不能是p(m)的前缀
- 利用ida python 实现复原函数调用的参数 (仅对数据被简单硬编码有效)
- 大数(非负数)的乘法
- [练习题] 将数组中的负数全部移到非负数的前面,要求O(n)时间复杂度
- 高精度非负数加法
- 高精度非负数减法
- 非负数四舍五入
- 正则表达式--非负数
- 高精度非负数模板
- js 获取系统信息(仅IE有效)
- js读取Excel的数据(仅IE有效)
- PHP 浏览器即时输出运动进度 仅对 IE有效 FIREFOX、CHROME未解决
- POJ 1469 COURSES (二分图最大匹配 匈牙利算法)
- 像在vim在中一样使用androidstudio
- LeetCode 题解(101): Minimum Window Substring
- Uva - 455 - Periodic Strings
- 6.8 Animation动画
- lua 中的 bit extend 库 (可能仅对非负数有效)
- APP Launchimage软件启动图片
- Codeforces Round #306 (Div. 2) (ABCE题解)
- UVA 10635 Prince and Princess 最长公共子序列(nlongn)
- 黑马程序员_多线程间通信
- EXCEL内的字符比较公式
- 菜鸟学Android笔记(二十六):Response数据输出
- ViewPager实例
- 循环顺序队列2——使用标示位判断队满或空