检查标志位的所有值 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"));
}
我阅读了 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"));
}