Android源码中常见的一些flag的运算理解

ApplicationInfo是android.content.pm包下的一个实体类,用于封装应用的信息,flags是其中的一个成员变量public int flags = 0; 用于保存应用的标志信息。

用法:以系统的ApplicationInfo为例
  判断是否系统应用 :

  if((flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM ) 

       解读:ApplicationInfo.FLAG_SYSTEM 是二进制1左移0位,还是1,flags & 1 若等于1的话,则flags的二进制末位必须是1,
       因此只有flags是奇数,对应的应用才会是系统应用。其他的属性用法类似。

看看1|2|4|8分别对应的二进制数:
1 : 0001
2 : 0010
4 : 0100
8 : 1000
 
注意:它们通过“或运算”可以组成1~15的数,并且不会出现两种或两种以上的相同情况。
 

Android源码中,包括一些比较规范的源码中,通常会出现flag(我理解我标志位)。

可以这么认为:

    a&~b:  清除标志位b;
    a|b:     添加标志位b;
    a&b:    取出标志位b;    eg:取后三位  a&7
    a^b:    取出a与b的不同部分;
 

Android源码中常见的一些flag的运算理解

上一篇:cookies插件 , axios插件


下一篇:安卓访问win10共享