[윤성우의 열혈 Java 프로그래밍] Chapter 04 비트 연산자
개인적으로 헷갈리는 것 중요한 것 위주로 정리해두고 연습문제를 풀어본 글입니다.
- 비트 연산자 : 비트를 대상으로 진행하는 연산자로 정수만 가능하다.
& AND 연산 : 두 비트가 모두 1일 때 1 반환
| OR 연산 : 두 비트 중 하나라도 1이면 1 반환
^ XOR 연산 : 두 비트가 서로 다른 값이면 1 반환
~ !와 같음 not : 비트를 0에서 1로, 1에서 0으로 반환 (반전)
n1 = 0 0 0 0 1 1 0 1
n2 = 0 0 0 0 0 1 1 1
&_______________________
0 0 0 0 0 1 0 1 각 비트마다 연산을 한다.
- 비트 쉬프트 연산자
<< : 비트열을 왼쪽으로 / 빈공간은 0
>> : 비트열을 오른쪽으로 / 빈공간은 음수면 1, 양수면 0
>>> : 비트열을 오른쪽으로 / 빈공간은 0
저 중에서 -8 의 (num >> 2)를 설명한다면,
-8의 비트는 8을 보수연산하여 구한다.
8 = 0 0 0 0 1 0 0 0
1의 보수 : 1 1 1 1 0 1 1 1
2의 보수 : 1 1 1 1 1 0 0 0
-8 = 1 1 1 1 1 0 0 0
이 비트열을 오른쪽으로 2칸 민다. 음수이므로 빈칸은 1로 채운다.
= 1 1 1 1 1 1 1 0
이 비트값을 다시 보수연산을 하여 수를 구하고 - 를 붙이면 된다.
-8 = 1 1 1 1 1 1 1 0
1의 보수 : 0 0 0 0 0 0 0 1
2의 보수 : 0 0 0 0 0 0 1 0 = 2
따라서, -8 의 (num >> 2)의 값은 -2 이다.
<문제 04-2>
문제 1.
새로운 변수 mun을 만들 필요도 없이 num만 사용해도 가능하고
int 형으로 선언해도 ~연산자에서 비트로 변환하기 때문에 괜찮다. 고 생각한다.
문제 2.
처음에 15678을 비트로 표현할 수 있는지에 생각이 멈췄는데
비트로 표현의 문제가 아니라 알고 싶은 비트를 그저 움직이기만 하면 되는 것이었다.