한번에 여러 가지 속성을 동시에 지정할 때, 편리하게 사용 할 수 있는 방법 중에 하나가 비트플래그이다.
간단하게 안드로이드에서 비트플래그를 사용하는 법을 알아보자.
(사실, 자바랑 똑같다)
우선 사용하는 연산자는 다음과 같다.
~A : NOT 연산자 – A의 각 비트가 0이면 1로, 1이면 0으로 바뀐다.
A & B : AND비트 연산자 – 두 비트가 모두 1일 때 1이다.
A | B : OR비트 연산자 – 두 비트가 모두 0일 때 0이다.
A ^ B : XOR비트 연산자 – 두 비트가 모두 달라야 1이다.
아래는 간단한 예제.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
public class Flag { // final static int FLAG_A = 1 << 0; // final static int FLAG_B = 1 << 1; // final static int FLAG_C = 1 << 2; // final static int FLAG_D = 1 << 3; // final static int FLAG_E = 1 << 4; // final static int FLAG_F = 1 << 5; final static int FLAG_A = 0x01; final static int FLAG_B = 0x02; final static int FLAG_C = 0x04; final static int FLAG_D = 0x08; final static int FLAG_E = 0x10; final static int FLAG_F = 0x20; static int flag = 0; public static void test() { flag = FLAG_B|FLAG_C|FLAG_F; printFlag(); // flag : FLAG_B FLAG_C FLAG_F checkA(); // I don't have FLAG_A // flag에 FLAG_A 추가 flag |= FLAG_A; printFlag(); // flag : FLAG_A FLAG_B FLAG_C FLAG_F checkA(); // I have FLAG_A // flag에 FLAG_A 제거 flag &= ~FLAG_A; printFlag(); // flag : FLAG_B FLAG_C FLAG_F checkA(); // I don't have FLAG_A } public static void checkA() { if ((flag&FLAG_A) != 0) { Log.i("flag", "I have FLAG_A"); } else { Log.i("flag", "I don't have FLAG_A"); } } public static void printFlag() { String result = "flag : "; if ((flag&FLAG_A) != 0) result += "FLAG_A "; if ((flag&FLAG_B) != 0) result += "FLAG_B "; if ((flag&FLAG_C) != 0) result += "FLAG_C "; if ((flag&FLAG_D) != 0) result += "FLAG_D "; if ((flag&FLAG_E) != 0) result += "FLAG_E "; if ((flag&FLAG_F) != 0) result += "FLAG_F "; Log.i("flag", result); } } |