Java 检查所有标志位的值

Java 检查所有标志位的值,java,android,flags,bits,Java,Android,Flags,Bits,我读了这篇文章是为了检查旗子是否有问题。然后我阅读,看看是否有办法获得一个标志中包含的所有值,但我有点困惑。有谁能告诉我有没有办法得到所有的值并加以解释 提前感谢。int标志的工作方式是这样的,您有一个整数,比如48,在二进制中,它将是00110000。这意味着它包含两个标志,一个是0010 0000,另一个是0001 0000。如果检查ApplicationInfo标志,您会注意到所有值都是2的幂(1,2,4,8..),这是因为2的幂的二进制表示形式都是零,只有一个1。因此,为了检查整数48包

我读了这篇文章是为了检查旗子是否有问题。然后我阅读,看看是否有办法获得一个标志中包含的所有值,但我有点困惑。有谁能告诉我有没有办法得到所有的值并加以解释


提前感谢。

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

int值=48;
int[]possibleFlags={ApplicationInfo.FLAG\u FACTORY\u TEST,ApplicationInfo.FLAG\u ALLOW\u TASK\u reparent,ApplicationInfo.FLAG\u ALLOW\u BACKUP};
字符串[]flagNames={“FLAG_FACTORY_TEST”、“FLAG_ALLOW_TASK_Reparent”、“FLAG_ALLOW_BACKUP”};
for(int i=0;i0;
Log.d(“Flags”,String.format(“flag%s%s,name,hasFlag?”PRESENT):“NOT PRESENT”);
}
我真的不理解您所问的方法,但是检查所有标志的另一种方法是迭代从1到31的2的所有幂(对于像java这样的4字节整数),但是您仍然需要将数字链接到实际常数,这有用吗?e、 g

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"));
}
for(int i=0;i<32;i++){
int-aFlag=10;
Log.d(“Flags”,String.format(“flag%s%s,aFlag,hasglag?”存在):“不存在”);
}

谢谢,lelloman这是我理解我的问题的重点,事实上,如果有这样的问题,我添加了另一个示例,我不确定这是否是您想要的
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"));
}