标记位
来源:互联网 发布:linux grep 命令 编辑:程序博客网 时间:2024/06/04 17:59
在Java中,我们经常用整数来表示状态、特性或者其他的信息。很常见的就是位来标记状态,如1,2,4,8,16……他们分别处于不同的位。当我们需要了解当前的状态时只需使用‘&’来判断其是否位零即可。
有时由于种类过多,所有标记状态均采用连续整数。如RelativeLayout的特性,均采用连续整数,当我们在调用addRule方法时,就不能使用’|‘来进行多个属性设置。
在Phaser类中,其使用了一个长整形来表示当前状态与数量。如下所示:
private volatile long state;
其中0-15位表示unarrived,16-31位表示parties,32-62位表示phase,最后一位表示 terminated。
该类对于这些状态的获取如下所示:
long s = (parent == null) ? state : reconcileState();int counts = (int)s;int parties = counts >>> PARTIES_SHIFT;int unarrived = counts & UNARRIVED_MASK;......phase = (int)(s >>> PHASE_SHIFT);
其中,PARTIES_SHIFT = 16,UNARRIVED_MASK = 0xffff,PHASE_SHIFT = 32。当我们将long转化成int时,会将其后面32位去除,保留起始32位,也就是unarrived与parties的标记位。要想获取parties,只需将counts右移16位即可。当然也可以用&来实现。如下所示:
int parties = counts & 0xffff0000;
phase的获取也是通过上面一样的方法来实现。
这是一种很巧妙的方法。充分利用了long转int的特点,减少了空间的占用,同时由于位运算速率很快,所以能让程序更快运行。
0 0
- 标记位
- OF标记位判断
- nyoj 86 --位标记
- Android Activity标记位
- tcp 6个标记位
- debug 中各标记位
- 页表项标记位的理解
- 设置位标记的开关宏
- 位图标记 二分查找 位二分
- poj 2777 线段树+位标记
- Activity启动模式及标记位
- Activity的启动模式和标记位
- [《.net框架程序设计》]第十三章 枚举类型与位标记
- 《.NET框架程序设计》第十三章 枚举类型与位标记
- 《.NET框架程序设计》第十三章 枚举类型与位标记
- 输入输出格式标记位、格式常量、格式设置函数
- CH13 枚举类型与位标记 .net 复习课
- Debug下标记寄存器的状态位英文缩写解释
- Pentaho Work with Big Data(七)—— 从Hadoop集群抽取数据
- Poj 1222 高斯消元
- LTE-TDD随机接入过程(5)-怎么生成64个前导码序列
- 虚函数实现机制
- Navicat for SQL Server 高级属性(状态)
- 标记位
- TCP报文
- 怎样才能用好EDIUS中的组与锁定
- 友盟,新浪微博,腾讯QQ分享的一些心得与总结,以及遇到的一些坑
- AndroidStudio导入错误日志
- Tp使用phpexcel导入导出excel
- IOS学习之——navigationController的界面跳转方法
- 删除排序链表中的重复元素
- 如何安装vmware tools