// 비트 마스킹 활용 순열.
T input[]; // 데이터 배열
int numbers[]; // 순열 저장 배열
void perm(int cnt, int N, flag){
if (cnt == N){
// 순열 완료
}
else{
for (int i = 0; i < N; i++){
// 비트 AND 연산을 통해 i번째 데이터의 사용 확인.
if ((flag & (1 << i)) != 0) continue;
numbers[cnt] = input[i]
// 비트 OR 연산을 통해 i번째 데이터의 상태 변경.
perm(cnt+1, flag | 1 <<i);
}
}
}
연산자 | 연산자의 기능 |
---|---|
& | 비트 단위 AND 연산. |
| | 비트 단위 OR 연산. |
^ | 비트 단위 XOR 연산. |
~ | 단항 연산자. 비트 반전. |
<< | 피연산자의 비트 열을 왼쪽으로 이동. |
>> | 피연산자의 비트 열을 오른쪽으로 이동. |
boolean[32]
boolean[64]