비트 연산자
비트 연산자 | 설명 |
& | 두 비트 값이 모두 1인 경우에만 1을 반환 (AND) |
| | 두 비트값 중 하나라도 1이면 1을 반환 (OR) |
^ | 두 비트값이 서로 다를 때 1을 반환 (XOR) |
~ | 비트가 1이면 0으로, 0이면 1로 반전 (NOT) |
<< | 지정 수만큼 비트를 전부 왼쪽으로 이동 (LEFT SHIFT) |
>> | 지정 수만큼 비트를 전부 오른쪽으로 이동 (RIGHT SHIFT) |
& (AND 연산자)
A | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
B | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 |
& | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
👉🏻 A, B 모두 1일때만 1을 반환한다.
| (OR 연산자)
A | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
B | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 |
| | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 |
👉🏻 A, B 둘 중 하나라도 1이면 1을 반환한다.
^ (XOR 연산자)
A | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
B | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 |
^ | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 |
👉🏻 A, B 값이 다를 때만 1을 반환한다.
~ (NOT 연산자)
A | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
~ | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 |
👉🏻 1일 때는 0, 0일 때는 1로 반전시킨다.
<<, >> (SHIFT 연산자)
6 << n
6을 2진수로 변환 : 0 0 0 0 0 1 1 0
6의 2진수를 왼쪽으로 n칸 옮기고 빈칸은 0으로 채운다.
n = 3
0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
반대로 6 >> n일때는
6의 2진수를 오른쪽으로 n칸 옮기고 빈칸은 최상위 부호비트와 같은 값으로 채운다.
n = 2
0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
음수일 때는 또 달라진다.
-6 << n
|-6| = 6, 6을 2진수로 변환 : 0 0 0 0 0 1 1 0
6의 2진수의 1의 보수 : 1 1 1 1 1 0 0 1
6의 2진수의 2의 보수 (-6의 2진수) : 1 1 1 1 1 0 1 0
-6의 2진수를 왼쪽으로 n칸 옮기고 빈칸은 0으로 채운다.
n = 3
1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
-6 >> n
-6의 2진수를 오른쪽으로 n칸 옮기고 빈칸은 최상위 부호비트와 같은 값으로 채운다.
n = 2
1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
하지만 알고리즘 문제에서는 '비트 연산자 쓰세요~'라는 친절함이 전혀 없기 때문에,
얘들을 직접 써먹으려면 문제를 많이 풀어보는 수 밖에 없겠다고 생각했다 ..
'TIL' 카테고리의 다른 글
[TIL] HTTP란 무엇일까? (0) | 2023.04.18 |
---|---|
[TIL] How does the Internet work (0) | 2023.04.16 |