백준의 집합 11723문제를 풀다 시간 오류가 발생하였다.
해당 문제는 비트마스크를 이용해서 푸는 문제이다.
집합_11723(백준)
0. 비트 (binary digit)
- 데이터를 나타내는 최소 단위
- n비트 정수형 변수는 2^0 ~ 2^(n-1) 까지 표현 할 수 있음
- 2^(N-1)에 해당하는 비트 값을 최상위 비트(Most Significant Bit)
- 2^0에 해당하는 비트 값을 최하위 비트(Least Significant Bit)
- 비트 연산
- 2의 보수 계산 : 1의 보수 + 1
- ex) 1100 의 2의 보수
- 0011(1100의 1의 보수 ) + 1 = 0100
1. 비트 연산자
- AND(&) : 모든 비트가 1이면 1 반환
- OR(|) : 비트 중 하나라도 1이면 1, 아니면 0 반환
- XOR(^) : 대응하는 비트가 다르면 1, 같으면 0 반환
- NOT(~) : 비트 값 반전
- Shift (<<, >>) : 비트를 이동
- int 32bit 길이를 가지지만, 첫 번째 비트는 부호 비트
- int 형은 2^31까지만 양방향으로 표현 가능
- 범위를 넘는 쉬프트 연산은 쓰레기값을 반환함
- java에서 16bit 자료형인 char는 부호가 없는 자료형임으로 이를 비트마스크에 많이 활용