Java 位运算符
来源:互联网 发布:asp新闻发布系统源码 编辑:程序博客网 时间:2024/04/30 05:14
介绍
位运算符用来对二进制位进行操作。
int a = 12; //0000 0000 0000 0000 0000 0000 0000 1100 int b = -5; //1111 1111 1111 1111 1111 1111 1111 1011 a & b = 8; //0000 0000 0000 0000 0000 0000 0000 1000 a | b = -1; //1111 1111 1111 1111 1111 1111 1111 1111 a ^ b = -9; //1111 1111 1111 1111 1111 1111 1111 0111 ~b = 4; //0000 0000 0000 0000 0000 0000 0000 0100 a << 1 = 24; //0000 0000 0000 0000 0000 0000 0001 1000 空位用0补 b << 1 = -10; //1111 1111 1111 1111 1111 1111 1111 0110 空位用0补 a >> 1 = 6; //0000 0000 0000 0000 0000 0000 0000 0110 空位用符号位的值补 b >> 1 = -3; //1111 1111 1111 1111 1111 1111 1111 1101 空位用符号位的值补 a >>> 1 = 6; //0000 0000 0000 0000 0000 0000 0000 0110 空位用0补 b >>> 1 = 2147483645;//0111 1111 1111 1111 1111 1111 1111 1101 空位用0补
优先级
~
<<、>>、>>>
&
^
|
从上到下表示优先级高到低。关联性从左到右。
用法
在android的view中关于visibility的代码,用于设置view的可见性。
public static final int VISIBLE = 0x00000000;//标记view是可见的 public static final int INVISIBLE = 0x00000004;//标记view是不可见的 public static final int GONE = 0x00000008;//标记view是死了的 static final int VISIBILITY_MASK = 0x0000000C;//setFlags时表明那些字节用于visibility int mViewFlags;//持有各种各样的view的状态 public void setVisibility(@Visibility int visibility) { setFlags(visibility, VISIBILITY_MASK); } void setFlags(int flags, int mask) { ······ int old = mViewFlags; mViewFlags = (mViewFlags & ~mask) | (flags & mask);//这行代码等于下面两行 //mViewFlags &= ~mask;//清除标记,只会清除visibility相关字节。 //mViewFlags |= flags & mask;//添加标记,flags & mask保证标记只会添加到visibility相关的字节中。 int changed = mViewFlags ^ old;//查看标记是否有改变 if (changed == 0) { return; } ······ } public int getVisibility() { return mViewFlags & VISIBILITY_MASK;//查看标记 }
用一个int类型的mViewFlags持有各种各样的view的状态,用一个int类型的静态常量VISIBILITY_MASK来表明那些字节用于visibility。对标记的操作:
- 添加标记:mViewFlags |= flags & mask
- 清除标记:mViewFlags &= ~mask
- 查看标记:mViewFlags & VISIBILITY_MASK
这样的写法有什么好处呢?
- 位运算效率高。
- 节省了内存空间(多个view的状态存在一个int里面,只通过一个静态常量表示所占用的字节)
android中很多源码都使用了这个写法。
阅读全文
1 0
- Java位运算符
- Java 位运算符
- Java 位运算符
- Java 位运算符
- Java 位运算符
- Java 位运算符
- Java 位运算符
- java 位运算符
- Java 位运算符
- Java 位运算符
- Java 位运算符
- java 位运算符
- JAVA位运算符
- Java 位运算符
- JAVA位运算符
- Java-位运算符
- java 位运算符
- Java 位运算符
- Android源码怎么编译adb?
- React 组件化
- 《Java并发编程的艺术》笔记五——Java线程基础.md
- hdu 6148 Valley Numer (数位dp)
- 创建索引原则
- Java 位运算符
- 如何从零开始构建自己的游戏
- 数据结构排序--冒泡与选择
- pat 乙级 1005 继续(3n+1)猜想 (25)
- Linux部署Web项目小记
- HDU 5787K-wolf Number
- [ Bootstrap ] 可视化布局
- 项目中处理压缩文件自制的一个小工具
- SLF4J: Class path contains multiple SLF4J bindings.