본문 바로가기
개발/android

함수의 옵션을 블럭처럼 조합해서 사용해보자~

by 매몰 2015. 8. 24.

 

 

 

 

 

소스를 짜다 보면 함수에 옵션을 넣어야 할 경우가 종종 있다

 

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

 

우주선 - 방치형 인공지능 투자 체험기

미리 맛보는 인공지능 투자!

(주)머리말 meorimal.com

 

https://meorimal.com/subway.html

 

지하철어디있니

더이상 고민하지 마세요. 뛸지 말지 딱 보면 알죠.

(주)머리말 meorimal.com

 

사업자 정보 표시
주식회사 머리말 | 고영진 | 서울특별시 송파구 중대로 135 서관 10층 (가락동, 아이티벤처타워) | 사업자 등록번호 : 524-88-00727 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2017-서울강남-03941호 | 사이버몰의 이용약관 바로가기