项目中用到了Cocos2d,接触了几天,发现Cocos2d对于2D游戏来讲开发效率蛮高的,近来学习一下库函数,Mark一下。这个系列应该会持续更新,欢迎多多关注,(*^__^*) 嘻嘻……
下面贴上源代码以及一些简单的注释
-- bit operation
bit = bit or {} --避免为空时报错
bit.data32 = {} --32位
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) --and or 类似于C++ 中的 A = B ? C : D
local tr={} --0xFFFFFFF相当于二进制的11111111 1111111 11111111 11111111
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._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._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
关于位运算的应用场景,整理了一下,大致如下
1.交换两个整数的值而不必用第三个参数
2.奇偶判断
3.格雷码
4.次幂,具体的详细内容如果想了解可以自行搜索
下面是一些链接,有兴趣的可以看看
https://blog.csdn.net/limanjihe/article/details/52382826
https://blog.csdn.net/alps1992/article/details/42131581
原文地址:https://blog.csdn.net/qq_39218906/article/details/94723397
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。