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

lua封装的位运算的更多相关文章

  1. 我眼中的 Nginx(一):Nginx 和位运算

    作者张超:又拍云系统开发高级工程师,负责又拍云 CDN 平台相关组件的更新及维护.Github ID: tokers,活跃于 OpenResty 社区和 Nginx 邮件列表等开源社区,专注于服务端技 ...

  2. EF架构~为分组添加位运算聚合方法

    回到目录 我们知道在Linq里的分组groupby可以对集合中一个或者多个字段进行分组,并对其中一个属性进行聚合,而Linq为我们提供了多种聚合方法,由aver,sum,count等,而在大叔权限体系 ...

  3. 关于PHP位运算的简单权限设计

    写在最前面 最近想写一个简单的关于权限处理的东西,之前我也了解过用二进制数的位运算可以出色地完成这个任务.关于二进制数 的位运算,常见的就是“或.与.非”这三种简单运算了,当然,我也查看了下PHP手册 ...

  4. 深入V8引擎-枚举+位运算实现参数配置

    不知不觉都快月底了,看了看上一篇还是6号写的,惭愧惭愧,说好的坚持.为了证明没有偷懒(其实还是沉迷了一会dota2),先上一个图自证清白. 基本上从初始化引擎,到Isolate.handleScope ...

  5. Java 位运算超全面总结

    1.原码.反码.补码 关于原码.反码.补码的相关知识作者不打算在这里长篇大论,相关知识已有别的大佬总结很好了,还请老铁自行 Google,不过有篇知乎回答是作者学编程以来见过对相关知识最通俗易懂,生动 ...

  6. Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range

    在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...

  7. 简简单单学会C#位运算

    一.理解位运算 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作 二.理解数字进制 上面 ...

  8. SQL Server时间粒度系列----第8节位运算以及设置日历数据表节假日标志详解

    本文目录列表: 1.位运算 2.设置日历数据表节假日标志 3.总结语 4.参考清单列表   位运算   SQL Server支持的按位运算符有三个,分别为:按位与(&).按位或(|).按位异或 ...

  9. js中的位运算

    按位运算符是把操作数看作一系列单独的位,而不是一个数字值.所以在这之前,不得不提到什么是"位": 数值或字符在内存内都是被存储为0和 1的序列,每个0和1被称之为1个位,比如说10 ...

随机推荐

  1. 【转】Ext.Window动态修改html

    原文地址:http://www.codeweblog.com/ext-window%E5%8A%A8%E6%80%81%E4%BF%AE%E6%94%B9html/ Ext.Window动态修改htm ...

  2. WPF通过EventTrigger改变其他控件的值

    场景:点击TextBox后弹出Poppup 原理:使用EventTrigger后触发StoryBoard,通过StoryBoard改变其他控件的值. 参考代码: <Grid> <Gr ...

  3. ubuntu 安装 mkfs.ubifs

    ubi 文件系统的制作需要 mkfs.ubifs 工具 但是又没有直接的 sudo apt-get install , 只能通过以下方式 sudo apt-get install mtd-utils

  4. [mount]linux 挂载时 mount: wrong fs type, bad option, bad superblock on /dev/sdb

    原因:挂载时未格式化,使用的文件系统格式不对 解决方案:格式化 sudo mkfs -t ext4 /dev/sdb 再挂载 sudo mount /dev/sdb /xxx/ 用df -h检查,发现 ...

  5. [uart]linux串口的阻塞非阻塞切换

    比如写的时候设置为阻塞,读的时候设置为非阻塞,就需要下面的切换方式 1.获取文件的flags,即open函数的第二个参数: flags = fcntl(fd,F_GETFL,0); 2.设置文件的fl ...

  6. Git 提交更改

    Jerry 已经提交的更改,他想纠正他的最后一次提交,在这种情况下,git 的修改将帮助操作.最后提交修改操作的变化,包括提交信息,它创建新的提交ID. 修改操作之前,他会检查提交日志. [jerry ...

  7. Redis基准

    Redis的基准是实用程序运行n个命令检查Redis 的性能. 语法 redis的基准的基本语法如下所示: redis-benchmark [option] [option value] 例子 下面给 ...

  8. 【linux】——一个小程序

    利用工作之余为小伙伴写了份作业,关于进程间通信的.题目如下: 父进程从键盘上接受1000个数据,对其求和sum1,子进程对这1000个数平方和sum2,结果传给父进程,父进程将sum1+sum2后,打 ...

  9. LeetCode practice

    子集和问题:给定一组数和一个值,从这组数中选出若干个数使其和为给定的值.这是个NPC问题. 1.https://leetcode.com/problems/counting-bits/#/soluti ...

  10. css样式冲突问题练习例子

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org ...