Java bit연산자와 shift연산자
2. bit연산자와 shift연산자
- bit 연산자
- 정수형 기본형 데이터 타입에서 각 비트를 개별적으로 조작한다.
- 양쪽 피연산이 되는 각각의 비트를 참, 거짓 연산을 수행한다.
& : 비트 AND연산자로 양쪽 비트 모두 참(1)일 경우에만 참(1)이다. 그렇지 않으면 거짓(0)이다.
(참:참=참, 참:거짓=거짓, 거짓:참=거짓, 거짓:거짓=거짓)
| : 비트 OR연산자로 양쪽 비트 중 어느 하나라도 참(1)이면 참(1)이다. 거짓(0)에 거짓(0) 일때만 거짓(0)이다.
(참:참=참, 참:거짓=참, 거짓:참=참, 거짓:거짓=거짓)
^ : 비트 EXCLUSIVE OR연산자로 양쪽 비트의 상태가 다를 경우에만 참(1)이다. 나머지는 거짓(0).
(참:참=거짓, 참:거짓=참, 거짓:참=참, 거짓:거짓=참)
~ : 비트 NOT연산자로 양쪽이 아닌 단항 연산자 이다. 참(1)을 거짓(0)으로 거짓(0)을 참(1)으로 만든다.
(~참=거짓, ~거짓=참)
ex) 177 & FF = 177 -> 10110001 & 11111111 = 10110001
ex) 177 | FF = FF -> 10110001 | 11111111 = 11111111
ex) 177 ^ FF = 78 -> 10110001 ^ 11111111 = 01001110
ex) ~177 = 78 -> ~10110001 = 01001110
- shift 연산자
- Java의 기본 정수는 반드시 첫 비트에 부호(sign)비트를 가진다. 이를 MSB(Most Significant Bit : 최상위 비트)라 한다.
- 부호비트가 0이면 양의 정수, 1이면 음의 정수를 나타낸다.
- 쉬프트 연산자는 Java 기본형 정수 타입에만 적용 가능하다.(byte, short, int, long)
<< : 좌측의 값을 우측에 지정한 수만큼 좌측으로 비트 이동한다. 우측에 이동한 만큼의 비트는 0으로 채운다. 최상위 비트의 부호를 유지한다.
>> : 좌측의 값을 우측에 지정한 수만큼 우측으로 비트 이동한다. 최상위 비트의 부호를 유지한다.
>>> : 좌측의 값을 우측에 지정한 수만큼 우측으로 비트 이동하고 이동한 만큼의 비트는 0으로 채운다. 최상위 비트의 부호를 유지하지 않는다.
ex) 177 << 4 = 8 -> 10110001 << 4 = 0001000
ex) 177 >>> 4 = 11 -> 10110001 >> 4 = 00001011
댓글
댓글 쓰기