用二进制去控制分享
来源:互联网 发布:成都网络外包公司 编辑:程序博客网 时间:2024/04/30 05:01
案例:
做分享功能,分享功能需求是这样的,可以分享到:自己的APP广场,自己的APP中的好友,群组、微信、朋友圈、微博、QQ,QQ空间八个平台。现在要根据服务器过来的参数判断哪些需要显示,哪些不用显示。比如参数名称叫int shareStatu。
我以前的解决方案可能是:1代表群组显示,2代表群组和微信都显示按照值去判断。
也可以每个都定义一个变量比如:isShowGroup boolean
但是都比较麻烦
今天才学到的一个技巧
上面相当于是开关系统,权限系统。用二进制的每一位表示一个功能,0表示关,1表示开,比如:11111111表示所有的功能全开。第一位表示广场,第二位表示群组,第三位表示私信,第四位表示微信,第五位表示朋友圈,第六位表示微博,第七位表示QQ,第八位表示QQ空间。和服务器定义好协议以后,10000000就表示只有QQ空间可以分享,其他功能隐藏。1表示只有广场可以分享,其他隐藏。
那么这个二进制如何在代码里去判断第几位是1或者0呢,这一这么算:
二进制在java里以0b开头,比如1用二进制在java里表示为0b1.
如果要判断第一位是否为1,则可以表示为shareStatu & 0b1 == 1,使用到了与运算,意思就是用前面的和后面的二进制数与,如果相同位都是1则为1,否则为0,这样比如shareStatu=3,也就是011,011&001=001=1.
如果要判断第三位是否为1也就是是否可分享到私信,比如shareStatus=5,也就是101,因为要判断第三位所以使用与的数也要为第三位为1,则为100,那么与运算:101&100=100=4,除了判断第一位,其他位都需要使用位移运算符>>,101&100>>2=1,>>意思是所有位向右移动,这时候就可以判断是否等于1了,也就是:shareStatu&0b100>>2 == 1.
这里需要注意的是,位移运算符的计算优先级要高于其他,所以正确的表达式应该是这样 boolean isOpen = ((shareStatu & 0b100) >> 2 == 1)
刚学到的,分享一下。
做分享功能,分享功能需求是这样的,可以分享到:自己的APP广场,自己的APP中的好友,群组、微信、朋友圈、微博、QQ,QQ空间八个平台。现在要根据服务器过来的参数判断哪些需要显示,哪些不用显示。比如参数名称叫int shareStatu。
我以前的解决方案可能是:1代表群组显示,2代表群组和微信都显示按照值去判断。
也可以每个都定义一个变量比如:isShowGroup boolean
但是都比较麻烦
今天才学到的一个技巧
上面相当于是开关系统,权限系统。用二进制的每一位表示一个功能,0表示关,1表示开,比如:11111111表示所有的功能全开。第一位表示广场,第二位表示群组,第三位表示私信,第四位表示微信,第五位表示朋友圈,第六位表示微博,第七位表示QQ,第八位表示QQ空间。和服务器定义好协议以后,10000000就表示只有QQ空间可以分享,其他功能隐藏。1表示只有广场可以分享,其他隐藏。
那么这个二进制如何在代码里去判断第几位是1或者0呢,这一这么算:
二进制在java里以0b开头,比如1用二进制在java里表示为0b1.
如果要判断第一位是否为1,则可以表示为shareStatu & 0b1 == 1,使用到了与运算,意思就是用前面的和后面的二进制数与,如果相同位都是1则为1,否则为0,这样比如shareStatu=3,也就是011,011&001=001=1.
如果要判断第三位是否为1也就是是否可分享到私信,比如shareStatus=5,也就是101,因为要判断第三位所以使用与的数也要为第三位为1,则为100,那么与运算:101&100=100=4,除了判断第一位,其他位都需要使用位移运算符>>,101&100>>2=1,>>意思是所有位向右移动,这时候就可以判断是否等于1了,也就是:shareStatu&0b100>>2 == 1.
这里需要注意的是,位移运算符的计算优先级要高于其他,所以正确的表达式应该是这样 boolean isOpen = ((shareStatu & 0b100) >> 2 == 1)
刚学到的,分享一下。
0 0
- 用二进制去控制分享
- 使用二进制 权限控制
- 使用二进制权限控制
- 二进制权限控制
- 二进制权限控制
- 字符串去控制字符
- 用查询方式去控制led灯(ARM 驱动开发)
- 你为什么会去分享?
- 控制文件的恢复(二进制)
- C++文件二进制流控制
- 二进制权限控制(二)
- 二进制权限控制(一)
- 分享一道与二进制相关的题目
- 分享一个Chrome内核浏览器下比较好用的去视频广告插件
- 我们该怎么样去定义分享经济
- 机器人 控制算法在线分享
- 171023—各进制数输出:二进制转换&用格式控制符输出八,十,十六进制数
- shu_1171 十->二进制转换(输入输出控制)
- Android学习——PopupWindow
- gradle项目构建
- poj1338(啊这题我要死了)
- Effective C++——条款45(第7章)
- JQuery对元素的常用操作
- 用二进制去控制分享
- ASP.NET中实现JSON和对象及集合之间互转,附JsonHelper辅助操作类
- java学习笔记之异常
- MTK 平台基带原理
- 使用Ionic.Zip后文件夹过多的解决办法?
- 搭建网站常见返回码40X 50X等错误的原因及解决方案
- 01背包问题(回溯算法实现)
- android Notification 通知封装
- 【转载】迅为4412开发板实验LEDS驱动一