기본 콘텐츠로 건너뛰기

라벨이 Multiple Selection with bit operation인 게시물 표시

다중 선택값과 비트 연산

다중 Checkbox 선택 값을 선택된 합산 값으로 DB 에서 저장하고, 이를 읽어서 선택된 Checkbox 를 설정해야 한다는 문의가 들어 왔다. 문의에 답변을 해준 김에 정리를 해 놓도록 한다. Unix를 써본 사람이라면 다중 플래그에 대한 것을 잘 알고 있을 것이다. Unix에서 권한코드 (Read, Write, Execute, ...) 가 같은 맥락이기 때문이다. 비트 연산 비트 연산에서 Shift 연산자를 제외하면 & (and), | (or), ^ (xor), ~ (비트 반전)의 4개 연산자가 존재한다. & 연산은 양쪽 모두 1인 경우만 1을 반환한다. | 연산은 양쪽 모두 0인 경우만 0을 반환한다. ^ 연산은 | 과 반대로 모두 1인 경우만 0을 반환한다. ~ 연산은 모든 비트의 값을 반전시킨다. 즉 1의 보수(반대값)를 나타낸다. 물론 대상은 unsigned 정수를 기준으로 한다. 따라서 선언은 16비트 선언을 기준으로 한다. 샘플 코드 백문이 불여일타이니 코드부터 알아보도록 한다. public static final int A = 0x01;    // 0000 0001 public static final int B = 0x02;    // 0000 0010 public static final int C = 0x04;    // 0000 0100 public static final int D = 0x08;    // 0000 1000 public static final int E = 0x10;    // 0001 0000 public static final int F = 0x20;    // 0010 0000 public static final int G = 0x40;    // 0100 0000 public static final int H = 0x80;    // 1000 0000 위의 선언과 이진 값에서 보이는 것과 같이 1, 2, 4, 8, ... 처럼 이진수로