lua封装的位运算

1.移位运算基础

 --与   同为1,则为1  

 --或   有一个为1,则为1    

 --非   true为 false,其余为true  

 --异或 相同为0,不同为1  

 --ZZMathBit = {}  

 function ZZMathBit.__andBit(left,right)    --与
return (left == and right == ) and or
end function ZZMathBit.__orBit(left, right) --或
return (left == or right == ) and or
end function ZZMathBit.__xorBit(left, right) --异或
return (left + right) == and or
end function ZZMathBit.__base(left, right, op) --对每一位进行op运算,然后将值返回
if left < right then
left, right = right, left
end
local res =
local shift =
while left ~= do
local ra = left % --取得每一位(最右边)
local rb = right %
res = shift * op(ra,rb) + res
shift = shift *
left = math.modf( left / ) --右移
right = math.modf( right / )
end
return res
end function ZZMathBit.andOp(left, right)
return ZZMathBit.__base(left, right, ZZMathBit.__andBit)
end function ZZMathBit.xorOp(left, right)
return ZZMathBit.__base(left, right, ZZMathBit.__xorBit)
end function ZZMathBit.orOp(left, right)
return ZZMathBit.__base(left, right, ZZMathBit.__orBit)
end function ZZMathBit.notOp(left)
return left > and -(left + ) or -left -
end function ZZMathBit.lShiftOp(left, num) --left左移num位
return left * ( ^ num)
end function ZZMathBit.rShiftOp(left,num) --right右移num位
return math.floor(left / ( ^ num))
end function ZZMathBit.test()
print( ZZMathBit.andOp(,0x3f)) --
print( % )
print( ZZMathBit.orOp(,))
print( ZZMathBit.xorOp(,))
print( ZZMathBit.rShiftOp(,))
print( ZZMathBit.notOp(-)) print(string.byte("abc",))
end
cclog("aaaaaaa:")
ZZMathBit.test()

[LUA-print] aaaaaaa:

[LUA-print] 1

[LUA-print] 1

[LUA-print] 7855

[LUA-print] 15535

[LUA-print] 2

[LUA-print] 3

[LUA-print] 97

2.红点

 function GlobalService:hasRedpointEmail( )
return ZZMathBit.andOp( ServerData.redPointStatus, dyt.RedPointStatus.Email ) ~=
end
 -- 红点状态
dyt.RedPointStatus = {
Email = ZZMathBit.lShiftOp( , ), --邮件
DailyTask = ZZMathBit.lShiftOp( , ), -- 每日任务
CommonTask = ZZMathBit.lShiftOp( , ), --任务
Draw = ZZMathBit.lShiftOp( , ), --抽卡
Sign = ZZMathBit.lShiftOp( , ), --签到
Activity = ZZMathBit.lShiftOp( , ), --7日活动
Legion = ZZMathBit.lShiftOp( , ), --军团
Escort = ZZMathBit.lShiftOp( , ), --护航
Collect = ZZMathBit.lShiftOp( , ), --委派
Union = ZZMathBit.lShiftOp( , ), --联动
SingleRecharge = ZZMathBit.lShiftOp( , ), --限时活动单笔充值
TotalRecharge = ZZMathBit.lShiftOp( , ), --限时活动累计充值
TotalCost = ZZMathBit.lShiftOp( , ), --限时活动累计消费
OilCost = ZZMathBit.lShiftOp( , ), --限时活动燃油消耗
TotalDraw = ZZMathBit.lShiftOp( , ), --限时活动金币抽卡
Qming = ZZMathBit.lShiftOp( , ), --限时活动清明好礼
BaoXiang = ZZMathBit.lShiftOp( , ), --限时活动金币抽卡宝箱
LevelFast = ZZMathBit.lShiftOp( , ), --快速补给活动
LevelFastRed = ZZMathBit.lShiftOp( , ), --快速补给活动红点
}

因此都是先左移然后表示一个唯一状态。

红点状态:利用与运算  同为1,则为1,用一个32位整数来表示活动。

原文地址:http://blog.csdn.net/themagickeyjianan/article/details/52640807

上一篇:Python自动化开发 - 字符编码、文件和集合


下一篇:07-Python入门学习-字符编码与文件处理