位掩碼參數,我發現了很多的Android功能都可以通過在這是一個位掩碼,爲不同的選擇,像的PendingIntent,你可以在東西傳給你一樣可以調用getActivity(參數)與PendingIntent.FLAG_CANCEL_CURRENT|PendingIntent.FLAG_NO_CREATE
。創造一個函數或方法
我不知道我怎樣才能創建具有這樣參數的函數?
位掩碼參數,我發現了很多的Android功能都可以通過在這是一個位掩碼,爲不同的選擇,像的PendingIntent,你可以在東西傳給你一樣可以調用getActivity(參數)與PendingIntent.FLAG_CANCEL_CURRENT|PendingIntent.FLAG_NO_CREATE
。創造一個函數或方法
我不知道我怎樣才能創建具有這樣參數的函數?
public static final int FLAG_1 = 1<<0; // 0x01
public static final int FLAG_2 = 1<<1; // 0x02
public static final int FLAG_3 = 1<<2; // 0x04
public static final int FLAG_4 = 1<<3; // 0x08
public void myFlagsFunction(int flags) {
if (0 != (flags & FLAG_1)) {
// do stuff
}
if (0 != (flags & FLAG_2)) {
// do stuff
}
}
它們是通過手動完成的,只需定義兩個冪的標誌。 This file使用左位移運算符,但不是必需的:
public static final int FLAG_ONE_SHOT = 1<<30;
//...
public static final int FLAG_NO_CREATE = 1<<29;
當我們做單< <(左移)爲int值,int值的二進制表示得到一個0從左邊最左邊的位被丟棄,這就產生了int的原始值加倍的效果,這意味着在每一次左移之後,我們將得到原始值的兩倍,這直到第31個索引(起始從右邊的0開始索引)最左邊的值被設置爲1,因爲使用了< <,在這種情況下,而不是原來的值的兩倍mes消極的int值。
現在所有的2的正面力量是1,2,4,8,16,32,......,1073741824對於int值。 這些值在某些索引處的二進制表示中僅包含單個'1'。
這有一個利潤,當你| (按位或)2的這些冪中的任何兩個,對於這兩個值,對應的索引「1」在結果值中被設置爲「1」。
例如8(1000)具有1的索引3處,和圖2(10)具有1的索引1,在當我們| (或)他們我們得到1010二進制,這意味着1和3索引位都設置爲1.
所以,如果你想檢查哪些標誌組合,你只需要檢查'1的。
對於示例 -
static int test0= 1;
static int test1= 2;
static int test2= 4;
static int test3= 8;
static int test4= 16;
static int test5= 32;
static int test6= 64;
int[] result;
int[] decision(int flags){
char[] x=Integer.toBinaryString(flags).toCharArray();
result=new int[x.length];
for(int i=x.length-1,j=0,k=0;i>=0;i--)
switch (x[k++]){
case '0':
break;
case '1':
if(i==0){
result[j++]=-1; //for ...000001 (test0) put -1 into the array instead of the value of i which is 0.
break;
}
result[j++]=i;
};
return result;
}
/* 例如,如果該判定方法返回其包含{6,3,1,0,0,0},那麼這意味着TEST6,TEST3和TEST1一個陣列標誌是or-ed(決定(test6 | test3 | test1))。 */
感謝上面的兩個答案,我問你如何提到的方法工作,我從上面的兩個答案得到了答案。實際的實現工作如前面兩個答案中所示。