博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lua封装的位运算
阅读量:6266 次
发布时间:2019-06-22

本文共 3546 字,大约阅读时间需要 11 分钟。

1.移位运算基础

1 --与   同为1,则为1   2     3 --或   有一个为1,则为1     4    5 --非   true为 false,其余为true   6    7 --异或 相同为0,不同为1   8    9   10 --ZZMathBit = {}  11   12 function ZZMathBit.__andBit(left,right)    --与  13     return (left == 1 and right == 1) and 1 or 0  14 end  15   16 function ZZMathBit.__orBit(left, right)    --或  17     return (left == 1 or right == 1) and 1 or 0  18 end  19   20 function ZZMathBit.__xorBit(left, right)   --异或  21     return (left + right) == 1 and 1 or 0  22 end  23   24 function ZZMathBit.__base(left, right, op) --对每一位进行op运算,然后将值返回  25     if left < right then  26         left, right = right, left  27     end  28     local res = 0  29     local shift = 1  30     while left ~= 0 do  31         local ra = left % 2    --取得每一位(最右边)  32         local rb = right % 2     33         res = shift * op(ra,rb) + res  34         shift = shift * 2  35         left = math.modf( left / 2)  --右移  36         right = math.modf( right / 2)  37     end  38     return res  39 end  40   41 function ZZMathBit.andOp(left, right)  42     return ZZMathBit.__base(left, right, ZZMathBit.__andBit)  43 end  44   45 function ZZMathBit.xorOp(left, right)  46     return ZZMathBit.__base(left, right, ZZMathBit.__xorBit)  47 end  48   49 function ZZMathBit.orOp(left, right)  50     return ZZMathBit.__base(left, right, ZZMathBit.__orBit)  51 end  52   53 function ZZMathBit.notOp(left)  54     return left > 0 and -(left + 1) or -left - 1  55 end  56   57 function ZZMathBit.lShiftOp(left, num)  --left左移num位  58     return left * (2 ^ num)  59 end  60   61 function ZZMathBit.rShiftOp(left,num)  --right右移num位  62     return math.floor(left / (2 ^ num))  63 end  64   65 function ZZMathBit.test()  66     print( ZZMathBit.andOp(65,0x3f))  --65 1000001    63 111111  67     print(65 % 64)  68     print( ZZMathBit.orOp(5678,6789))  69     print( ZZMathBit.xorOp(13579,2468))  70     print( ZZMathBit.rShiftOp(16,3))  71     print( ZZMathBit.notOp(-4))  72   73     print(string.byte("abc",1))  74 end  75 cclog("aaaaaaa:")  76 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.红点

1 function GlobalService:hasRedpointEmail( )  2     return ZZMathBit.andOp( ServerData.redPointStatus, dyt.RedPointStatus.Email )  ~= 0  3 end
1 -- 红点状态   2 dyt.RedPointStatus = {   3     Email = ZZMathBit.lShiftOp( 1, 0 ),  --邮件   4     DailyTask = ZZMathBit.lShiftOp( 1, 1),  -- 每日任务   5     CommonTask = ZZMathBit.lShiftOp( 1, 2 ), --任务   6     Draw = ZZMathBit.lShiftOp( 1, 3 ), --抽卡   7     Sign = ZZMathBit.lShiftOp( 1, 4 ), --签到   8     Activity = ZZMathBit.lShiftOp( 1, 5 ), --7日活动   9     Legion = ZZMathBit.lShiftOp( 1, 6 ), --军团  10     Escort = ZZMathBit.lShiftOp( 1, 7 ), --护航  11     Collect = ZZMathBit.lShiftOp( 1, 9 ), --委派  12     Union = ZZMathBit.lShiftOp( 1 , 10 ), --联动  13     SingleRecharge = ZZMathBit.lShiftOp( 1 , 11 ), --限时活动单笔充值  14     TotalRecharge = ZZMathBit.lShiftOp( 1 , 12 ), --限时活动累计充值  15     TotalCost = ZZMathBit.lShiftOp( 1 , 13 ), --限时活动累计消费  16     OilCost = ZZMathBit.lShiftOp( 1 , 14 ), --限时活动燃油消耗  17     TotalDraw = ZZMathBit.lShiftOp( 1 , 15 ), --限时活动金币抽卡  18     Qming = ZZMathBit.lShiftOp( 1 , 16 ), --限时活动清明好礼  19     BaoXiang = ZZMathBit.lShiftOp( 1 , 19 ), --限时活动金币抽卡宝箱  20     LevelFast = ZZMathBit.lShiftOp( 1 , 20 ), --快速补给活动  21     LevelFastRed = ZZMathBit.lShiftOp( 1 , 21 ), --快速补给活动红点  22 }

因此都是先左移然后表示一个唯一状态。

红点状态:利用与运算  同为1,则为1,用一个32位整数来表示活动。

原文地址:

转载于:https://www.cnblogs.com/AaronBlogs/p/7516270.html

你可能感兴趣的文章
CSS规范
查看>>
使用FastDateFormat来代替JDK自带的DateFormat
查看>>
Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法
查看>>
Android源代码解析之(三)--&gt;异步任务AsyncTask
查看>>
(zhuan) 自然语言处理中的Attention Model:是什么及为什么
查看>>
C#中使用RabbitMQ收发队列消息
查看>>
Hadoop1.2.1 全然分布式集群搭建实操笔记
查看>>
第三百二十七节,web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求...
查看>>
MVC总结--MVC简单介绍以及和WebForm差别
查看>>
tiny4412 裸机程序 五、控制icache【转】
查看>>
VB.NET多线程入门
查看>>
国外物联网平台初探(二) ——微软Azure IoT
查看>>
findlibrary returned null产生的联想,Android ndk开发打包时我们应该怎样注意平台的兼容(x86,arm,arm-v7a)...
查看>>
Android事件分发机制源代码分析
查看>>
《设计模式》结构型模式
查看>>
[javase学习笔记]-8.3 statickeyword使用的注意细节
查看>>
Spring集成RabbitMQ-使用RabbitMQ更方便
查看>>
Nginx 设置域名转向配置
查看>>
.net core 实现简单爬虫—抓取博客园的博文列表
查看>>
FP-Tree算法的实现
查看>>