gpt4 book ai didi

java - 检查标志位的所有值 java Android

转载 作者:搜寻专家 更新时间:2023-11-01 09:36:47 31 4
gpt4 key购买 nike

我读过 this post为了检查 ApplicationInfo 的标志.但后来我读了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 的所有幂(对于 4 字节整数,如 java),但你仍然需要链接实际常数的数字,它会有用吗?例如

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"));
}

关于java - 检查标志位的所有值 java Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42483582/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com