美文网首页
Android位运算知识

Android位运算知识

作者: 在岁月中远行 | 来源:发表于2022-08-13 01:27 被阅读0次

在Android源码中,发现了大量使用位运算& | ~<<等等。如果不懂二进制位运算一些基本知识,势必会影响以后我们对源码的学习和分析。

比如View类的

还有Intent类的

以及ViewGroup类的

它们有的是

ViewGroup#static final int FLAG_CLIP_CHILDREN =0x1;

Intent#public static final int FLAG_ACTIVITY_FORWARD_RESULT =0x02000000;

这些都是十六进制数,前面0x开头的。

我开始看这些0x十六进制也不是太懂。有的0x后面有一位,有的后面又有几位。

其实主要还是让它们后转换了二进制数在某个位有1,其余是0的情况下,一个1就代表了一种状态。

那么我们就可以利用这个特性来进行按位与(&)和按位或(|)来操作,来达到多个值得判断和组合。

我就用ViewGroup的一些标志位来分析:可以看下图

我是直接把这些十六进制打印出来,然后推算二进制这样好理解一点,然后再换算成1左移多少位来理解的。从箭头指向可以看出来。这些数字正好对应二进制的数某位有1,其余位0的情况。代表一种状态。

下面以一个人的兴趣爱好来分析位运算。人的兴趣爱好可以有很多种,也可以没有。

总结:

当我们需要保存和获取一些事物多状态的场景下,可以使用位运算。节省内存。代码优雅。

public static final int RUNNNING =1 <<0; //跑步0x000001

public static final int DISCO =1 <<2;      //蹦迪 0x000100

可以采取这种1<<左移动几位来做你需要的几种标志位。

flag | =a //添加标志a

flag &=~a 移除标志a

flag & a 取出标记a 取出结果a本身 或者0

相关文章

网友评论

      本文标题:Android位运算知识

      本文链接:https://www.haomeiwen.com/subject/wkofgrtx.html