소스를 짜다 보면 함수에 옵션을 넣어야 할 경우가 종종 있다
function(value1, value2, OPTION);
이런식으로 말이다. 그런데 비트연산자로 조합해서 쓰면 더 유용하다
function(value1, value2, OPTION1|OPTION2);
그렇다면 이 비트연산자 조합은 어떤식으로 적용되는 것일까?
먼저 "|"는 or로 두개중 하나만 참이면 참이 된다
예를 들면,
0 | 0 = 0
1 | 0 = 1
1 | 1 = 1
이것을 이용하면 두개의 조합이 가능하다
OPTION1 OPTION2
000 000 | 000 000 = 000 000
001 000 | 000 010 = 001 010
010 000 | 000 111 = 010 111
위와 같이 각각 한쪽을 000으로 비워두고 or을 쓰면 합칠 수 있다
합친 것을 분리할때는 쉬프트 ">>" 와 and "&" 를 쓰면 된다
쉬프트는 자리를 이동시키는 것이고,
100 >> 1 = 010
100 >> 2 = 001
100 >> 3 = 000
and는 두개가 모두 참이여야 참이 되는 것이다.
0 & 0 = 0
1 & 0 = 0
1 & 1 = 1
이젠 분리시켜 보자
OPTION1
000 000 >> 3 = 000 000
001 010 >> 3 = 000 001
010 111 >> 3 = 000 010
OPTION2
000 000 & 000 111 = 000 000
001 010 & 000 111 = 000 010
010 111 & 000 111 = 000 111
마치 블럭처럼 붙였다 떼었다 하는것 같지 않은가?
문자정렬로 응용을 해보면 이렇다
숫자는 10진수로 표현했다
public static final int GRAVITY_CENTER = 0;
public static final int GRAVITY_LEFT = 8;
public static final int GRAVITY_RIGHT = 16;
public static final int GRAVITY_TOP = 1;
public static final int GRAVITY_BOTTOM = 2;
public void setTextGravity(int gravity) {
int gravityx = gravity >> 3;
int gravityy = gravity & 7;
switch (gravityx) {
case 0:
//center
break;
case 1:
//left
break;
case 2:
//right
}
switch (gravityy) {
case 0:
//center
break;
case 1:
//top
break;
case 2:
//bottom
}
}
setTextGravity(GRAVITY_CENTER);
setTextGravity(GRAVITY_RIGHT | GRAVITY_TOP);
도움이 되셨다면~ 정성으로 빚은 저희 앱! 많은 이용 바래요:)
https://meorimal.com/index.html?tab=spaceship
https://meorimal.com/subway.html
'개발 > android' 카테고리의 다른 글
이미지를 싹뚝 자를때 꼭 알아야 할 비밀 (0) | 2015.10.26 |
---|---|
DialogFragment에 DismissListener를 쉽게 사용하는 방법 (2) | 2015.09.21 |
Fragment에서 startActivityForResult() 호출시 onActivityResult() requestCode 문제 (0) | 2015.06.22 |
버튼 누름 효과를 만드는 2가지 방법 (2) | 2015.04.19 |
오로지 기울기 센서로만 가로세로 모드 체크하기 (0) | 2015.02.23 |