흔하진 않지만 사용되면 반드시 쓰임새를 알아야 하는 연산으로, 코딩테스트연습문제에 종종 출제되어 개념을 총 망라하고자 본 포스팅을 한다. (틀리긴 아까우니깐)
일반적인 operator를 사용한 연산은 CPU가 여러 클럭을 소모하지만, 비트 연산은 CPU가 직접 비트 단위로 처리하므로 휄씬 빠르고 효율적이다.

(1) 짝/홀 판별
if((n & 1) ==1) //o홀수
else // 짝수
👉 %2 연산보다 빠름
(2) 특정 비트 확인
if((n&(1<<k))!=0){
System.out.println(k + "번째 비트는 1")
}
👉 K번째 자리만 1인 마스크
(3) 비트 조작
n|(1<<k)n & ~(1<<k) (-> k번쨰 자리를 꺼야되니 반전주고 &연산)n ^ (1<<k)십진수로 들어온 수를 이진수로 바꾸었을 때 1인 위치를 출력하는 간단한 문제이다.
import java.io.*;
import java.util.*;
class Main{
static int pos;
public static void main(String[]args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int TC = Integer.parseInt(br.readLine());
List<Integer> list = new ArrayList<>();
StringBuilder sb = new StringBuilder();
while(TC-->0){
pos =0;
int num = Integer.parseInt(br.readLine());
while(num>0){
if((num&1)==1){
list.add(pos);
}
num>>=1;
pos++;
}
//output
for(int i=0;i<list.size();i++){
sb.append(list.get(i));
sb.append(" ");
}
list.clear();
sb.append("\n");
}//end of TC
System.out.println(sb);
}//end of main
}//end of class
비트연산은 빠른 속도 + 적은 메모리가 강점.
%, *, / 대신 &, <<, >>로 치환 가능.
코테 단골 패턴:
홀짝 판별, k번째 비트 확인, on/off/toggle, 부분집합 탐색, 방문 체크등이 있고 계속 update예정