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. andriod自定义视图

    一.通过View实现自定义视图 通过构造函数创建可视界面 public class MyView extends View { // Constructor required for in-code ...

  2. Mac OS X上如何实现到Linux主机的ssh免登陆

    转载说明: 本文转载自 http://www.aips.me/mac-key-ssh-login-linux.html 生成密钥对 用密码登录远程主机,将公钥拷贝过去 done 第一步:生成密匙对执行 ...

  3. MongoDB不支持批量插入

    mongodb的结构与关系型数据库不同,它类似树状结构,可以很方便对每个分支进行操作,但它没有像mysql那样insert(value.value.value...)那样的语法,也不支持transac ...

  4. Android——用Activity和Service实现简单的音乐播放器

    一.只用Activity 容易出现问题 xml <?xml version="1.0" encoding="utf-8"?> <LinearL ...

  5. Selenium (4) —— Selenium是什么? WebDriver是什么?做什么?(101 Tutorial)

    Selenium (4) -- Selenium是什么? WebDriver是什么?做什么?(101 Tutorial) selenium版本: v2.48.0 (Standalone Seleniu ...

  6. destoon 添加一个新的模块

    根目录rename,中config.inc.php文件/module/rename下两个文件,my.inc.php ,rename.class.php/module/rename/admin/三个文件 ...

  7. ASP.NET Core 2.0使用Log4net实现记录日志功能

    一.安装Log4net 1.使用Nuget包进行安装 在依赖项上面右键,选择“管理NuGet程序包”,如下图所示: 在浏览界面输入log4net,然后点击安装,如下图所示: 2.使用程序包管理器控制台 ...

  8. PCL中分割_欧式分割(1)

    基于欧式距离的分割和基于区域生长的分割本质上都是用区分邻里关系远近来完成的.由于点云数据提供了更高维度的数据,故有很多信息可以提取获得.欧几里得算法使用邻居之间距离作为判定标准,而区域生长算法则利用了 ...

  9. 连接两个点云中的字段或数据形成新点云以及Opennni Grabber初识

    (1)学习如何连接两个不同点云为一个点云,进行操作前要确保两个数据集中字段的类型相同和维度相等,同时了解如何连接两个不同点云的字段(例如颜色 法线)这种操作的强制约束条件是两个数据集中点的数目必须一样 ...

  10. Centos7下安装运行keepalived

    master服务器ip地址:192.168.0.182 slave服务器ip地址:192.168.0.189 虚拟ip(VIP,一个尚未占用的内网ip即可)地址:192.168.0.180  确认使用 ...