[ TIL ] Bit Operation

codesver·2023년 3월 3일
0

TIL

목록 보기
4/8
post-thumbnail

비트 연산은 이해력 측면에서는 좋은 코드가 아니라고 생각한다.

하지만 속도 측면에서는 일반적인 연산에 비해 굉장히 빠르다.

백준 2239번 문제를 일반 연산과 bit 연산으로 풀었을 때의 속도 차이이다.

2배 이상의 속도 차이가 나는 것을 알 수 있다.

성능이 중요한 경우에는 bit 연산으로 대체하는 것도 하나의 방법이다.

이 때문에 이번 기회에 Java Bit Operation(논리 연산자)에 대해 정리하고자 한다.

1. AND

AND 연산은 두 피연산자가 모두 true 일때 true가 된다.

System.out.println(1 & 1);  // 1
System.out.println(1 & 0);  // 0
System.out.println(0 & 0);  // 0

2. OR

OR 연산은 두 피연산자 중 하나라도 true이면 true 이다.

System.out.println(1 | 1);  // 1
System.out.println(1 | 0);  // 1
System.out.println(0 | 0);  // 0

3. XOR

XOR 연산은 두 피연산자가 다를 때 true이다.

System.out.println(1 ^ 1);  // 0
System.out.println(1 ^ 0);  // 1
System.out.println(0 ^ 0);  // 0

4. NOT 연산

NOT 연산은 true는 false으로 false는 true로 변경한다.

System.out.println(4 & ~3);     // 100 & ~(011) = 100 & 100 = 100 = 4
System.out.println(5 & ~3);     // 101 & ~(011) = 101 & 100 = 100 = 4
System.out.println(17 & ~9);    // 10001 & ~(01001) = 10001 & 10110 = 10000 = 16

5. Shift

Shift 연산은 비트열을 한 방향으로 이동시키는 연산이다.

<< 연산을 왼쪽으로 >> 연산으로 오른쪽으로 이동시킨다.

추가로 >>> 연산은 빈 공간을 0으로 채운다는 뜻이다. (양수만 판단)

System.out.println(3 << 1);     // 6
System.out.println(3 << 2);     // 12
System.out.println(64 >> 3);    // 8
System.out.println(-64 >>> 31); // 1
profile
Hello, Devs!

0개의 댓글