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 ...
随机推荐
- spark streaming checkpoint
Checkpoint机制 通过前期对Spark Streaming的理解,我们知道,Spark Streaming应用程序如果不手动停止,则将一直运行下去,在实际中应用程序一般是24小时*7天不间断运 ...
- C语言 · 排列数 · 排列式
蓝桥练习场上不断碰到类似的题,都是一个递归搜索的套路. 算法提高 排列数 时间限制:1.0s 内存限制:256.0MB 问题描述 0.1.2三个数字的全排列有六种,按照字母序排列如下 ...
- Java并发编程 LockSupport源码分析
这个类比较简单,是一个静态类,不需要实例化直接使用,底层是通过java未开源的Unsafe直接调用底层操作系统来完成对线程的阻塞. package java.util.concurrent.locks ...
- TextView 设置部分文字颜色及点击事件SpannableString
设置TextView中一部分文字的颜色及点击事件. SpannableString gotoMsgListStr = new SpannableString("消息列表"); go ...
- Java设计模式(1)工厂模式(Factory模式)
工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...
- T-SQL 错误状态
MS Windows Error Messages Code Error Message 0 操作成功完成. 1 功能错误. 2 系统找不到指定的文件. 3 系统找不到指定的路径. 4 系统无法打开文 ...
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (七)
在本项目中使用到的“语音转文本”的技术总结: 语音转文本部分是调用的科大讯飞的在线语音,它的激发方式是按键,通过按钮触发开启安卓设备的录音,此部分需要在源码中写入关于安卓权限的要求,来调用安卓的录音权 ...
- Linux 下如何处理包含空格和特殊字符的文件名
Linux 下如何处理包含空格和特殊字符的文件名 作者: Avishek Kumar 译者: LCTT zpl1025 | 2015-07-08 07:47 评论: 12 收藏: 9 分享: 1 ...
- mxnet img2rec的使用,生成数据文件
建立文件夹 制作lst文件,即生成train.lst文件python im2rec.py ./mxrec/train ./mxdata --list --recursive train.lst文件格式 ...
- Data source rejected establishment of connection, message from server: "Too many connections"
详细错误信息: Caused by: com.MySQL.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source ...