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 ...
随机推荐
- Mybatis generator 自动生成代码(2)
最近准备开始做一个项目,需要开始手动创建sql,于是将Mybatis generator 工具功能强化了下. 首先,这里引入到版本一点的包 <dependency> <groupId ...
- [转]java利用AES实现URL的参数加密
原文地址:http://h5566h.iteye.com/blog/1465426 很多时候需要在URL传参,希望URL参数能够加密,这里我结合了文章http://www.2cto.com/kf/20 ...
- CACTI命令行添加DEVICE/GRAPH/TREE
有时要加入大量的机器到 Cacti ,直接修改 Cacti 还是很复杂的.所以最好还是通过他本身提供的工具来实现. Cacti 早就为我们想到过这个问题了.这些工具就在 cacti/cli 目 ...
- 未能加载文件或程序集“System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。系统找不到指定的文件。
问题:WPF未能加载文件或程序集"System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ...
- C语言 · 数组排序去重
算法训练 数组排序去重 时间限制:1.0s 内存限制:512.0MB 问题描述 输入10个整数组成的序列,要求对其进行升序排序,并去掉重复元素. 输入格式 10个整数. 输出格式 ...
- [uboot]uboot中显示logo
http://blog.chinaunix.net/uid-20543672-id-3246292.html
- Linux环境下NodeJS和MongoDB的安装配置
一.NodeJS的安装配置 #进入安装目录cd /usr/local/ #删除原有安装rm -rf noderm -rf node-v0.10.29-linux-x64 #解压压缩包tar -zxv ...
- [转]C# RichTextBox不用滚动条
转自:http://blog.csdn.net/happy09li/article/details/7444912 第一种思路: richTextBox1.ScrollBars = RichTextB ...
- 编写.info文件
概述 drupal用.info文件来存储主题和模块的metadata. 对于模块来说,.info文件用于: 为Drupal站点管理界面解析信息: 为模块的激活和卸载提供标准和需求: 提醒drupal一 ...
- JQuery操作cookies
jQuery.cookie = function(name, value, options) { if (typeof value != 'undefined') { // name and valu ...