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
lua封装的位运算的更多相关文章
- 我眼中的 Nginx(一):Nginx 和位运算
作者张超:又拍云系统开发高级工程师,负责又拍云 CDN 平台相关组件的更新及维护.Github ID: tokers,活跃于 OpenResty 社区和 Nginx 邮件列表等开源社区,专注于服务端技 ...
- EF架构~为分组添加位运算聚合方法
回到目录 我们知道在Linq里的分组groupby可以对集合中一个或者多个字段进行分组,并对其中一个属性进行聚合,而Linq为我们提供了多种聚合方法,由aver,sum,count等,而在大叔权限体系 ...
- 关于PHP位运算的简单权限设计
写在最前面 最近想写一个简单的关于权限处理的东西,之前我也了解过用二进制数的位运算可以出色地完成这个任务.关于二进制数 的位运算,常见的就是“或.与.非”这三种简单运算了,当然,我也查看了下PHP手册 ...
- 深入V8引擎-枚举+位运算实现参数配置
不知不觉都快月底了,看了看上一篇还是6号写的,惭愧惭愧,说好的坚持.为了证明没有偷懒(其实还是沉迷了一会dota2),先上一个图自证清白. 基本上从初始化引擎,到Isolate.handleScope ...
- Java 位运算超全面总结
1.原码.反码.补码 关于原码.反码.补码的相关知识作者不打算在这里长篇大论,相关知识已有别的大佬总结很好了,还请老铁自行 Google,不过有篇知乎回答是作者学编程以来见过对相关知识最通俗易懂,生动 ...
- Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range
在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...
- 简简单单学会C#位运算
一.理解位运算 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作 二.理解数字进制 上面 ...
- SQL Server时间粒度系列----第8节位运算以及设置日历数据表节假日标志详解
本文目录列表: 1.位运算 2.设置日历数据表节假日标志 3.总结语 4.参考清单列表 位运算 SQL Server支持的按位运算符有三个,分别为:按位与(&).按位或(|).按位异或 ...
- js中的位运算
按位运算符是把操作数看作一系列单独的位,而不是一个数字值.所以在这之前,不得不提到什么是"位": 数值或字符在内存内都是被存储为0和 1的序列,每个0和1被称之为1个位,比如说10 ...
随机推荐
- Windows系统32位、64位DLL文件的存放位置
查资料时无意中发现,Windows系统存放DLL的文件路径似乎有点蹊跷: 32位的DLL存放在C:\Windows\SysWOW64,而64位的DLL存放在C:\Windows\System32.即使 ...
- 【转】一篇文章读懂人力资源三支柱体系(COE・BP・SSC)
通过人力资源转型,提升效率和效能 作者:Sharon Li,翰威特大中华区咨询总监. 杰克韦尔奇曾说过“人力资源负责人在任何企业中都应该是第二号人物”,但在中国,99%的企业都做不到.原因很简单, ...
- [转]Java动态代理
动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译时就确定了,而动态代理的代理关 ...
- C#获取MySql 数据常用的代码
1.读取 public DataTable ExecuteDataTable(string SQLString) { using (MySqlConnection connection = new M ...
- sps和pps的简单理解记录
最近博客写出了日记的既视感... 使用RTP传输H264的时候,需要用到sdp协议描述,其中有两项:Sequence Parameter Sets (SPS) 和Picture Parameter S ...
- 自然语言交流系统 phxnet团队 创新实训 个人博客 (十三)
关于java socket的一些总结: Java Socket通信有很多的时候需要我们不断的学习.方面效率虽然不及C与C++但它以灵活语言优势,为大家广为使用. 本文就对在使用java做通信方面程序时 ...
- linux下查看目录下某种文件类型累计的代码行数
find 路径 -name '*.py' | xargs wc -l
- (笔记)Mysql命令select:当前选择(连接)的数据库
select命令表示当前选择(连接)的数据库. select命令格式:mysql> select database(); MySQL中SELECT命令类似于其他编程语言里的print或者writ ...
- redis实现区间查询
###redis实现区间查询 在实际开发中经常遇到这样需求:服务端对于客户端不同的版本区间会做些不同的配置,那么客户端一个版本过来怎么快速的定位是属于哪个版本区间呢?可以利用`Sorted Sets` ...
- python环境搭建和开发工具的配置【转】
因为要学习python了,第一步当然是环境搭建和开发工具的配置了,下边开始了. 我的开发环境是在window下. 一.环境搭建 先在python官网python.org下载安装文件,python2.x ...