检查标志位的所有值 java Android

check all the values of flag bits java Android

我阅读了 this post in order to check the flags for ApplicationInfo . But then I read this post 以查看是否有办法获取标志中包含的所有值,但我有点困惑。谁能告诉我是否有办法获取所有值并进行解释?

提前致谢。

int 标志以这种方式工作,你有一个整数,比如 48,在二进制中它将是 0011 0000。这意味着它包含 2 个标志,一个是 0010 0000,另一个是 0001 0000。如果您检查 ApplicationInfo 标志,您会注意到所有值都是 2 的幂(1,2,4,8..),这是因为 2 的幂的二进制表示全为零,只有一个 1。因此,按顺序要检查整数 48 包含哪些标志,您可以这样做(注意 & 运算符,它是按位与,如果您对此有疑问,请阅读 this):

int value = 48;
int[] possibleFlags = {ApplicationInfo.FLAG_FACTORY_TEST, ApplicationInfo.FLAG_ALLOW_TASK_REPARENTING, ApplicationInfo.FLAG_ALLOW_BACKUP};
String[] flagNames = {"FLAG_FACTORY_TEST", "FLAG_ALLOW_TASK_REPARENTING", "FLAG_ALLOW_BACKUP"};

 for (int i = 0; i < possibleFlags.length; i++) {
    int aFlag = possibleFlags[i];
    String name = flagNames[i];
    boolean hasFlag = (value & aFlag) > 0;
    Log.d("Flags", String.format("flag %s %s", name, hasFlag ? "PRESENT" : "NOT PRESENT"));
}

我不太明白你问的方法,但另一种检查所有标志的方法是从 1 到 31 迭代所有 2 的幂(对于像 java 这样的 4 字节整数)但你仍然需要 link 数字到实际常量,这会有用吗?例如

for (int i = 0; i < 32; i++) {
    int aFlag = 1 << i;
    boolean hasFlag = (value & aFlag) > 0;
    Log.d("Flags", String.format("flag %s %s", aFlag, hasFlag ? "PRESENT" : "NOT PRESENT"));
}