티스토리 뷰

비트 연산자 & 시프트 연산자

1. 비트연산자

논리곱 (and) &

각 비트를 비교하여 양쪽 모두 1이면 1, 아니면 0을 반환

A & B = C 일때

A=1 이고 B=1일 때 C 가 1

A=1 이고 B=0 이면 C는 0

A=0 이고 B=1 이면 C는 0

A=0 이고 B=0 이면 C는 0

논리합 (or) |

각 비트를 비교하여 어느 한쪽이 1이면 1, 모두 0일때 0

A | B = C 일때

A=1 이고 B=1일 때 C 가 1

A=1 이고 B=0 이면 C는 1

A=0 이고 B=1 이면 C는 1

A=0 이고 B=0 이면 C는 0

배타적 논리합 (xor) ^

각 비트를 비교하여 한쪽이 1이고 다른 한쪽이 0이면 1, 아니면 0을 반환한다

A^B = C 일때

A=1 이고 B=0 이면 C는 0

A=1 이고 B=0 이면 C는 1

A=0 이고 B=1 이면 C는 1

A=0 이고 B=0 이면 C는 0

1의 보수 표현 (not) ~

각 비트를 반전시킨 값을 반환함

A=0110110 일때

~A=1001001이다

2. 시프트 연산자

비트 열을 좌우로 지시한 만큼 이동시키는(shift) 연산자를 말합니다.

자바에는 >> ,<< 외에도 추가적으로 >>> 연산자가 있습니다.

왼쪽 시프트 연산자 <<

ex) 150 << 2 : 150의 이진값을 왼쪽으로 2칸 시프트

10010110 : 150

1001011000:600

왼쪽으로 두칸 밀리면서 생기는 빈칸은 0으로 채우고

데이터를 담는 자료형이 byte 타입이라면 왼쪽으로 밀린 2개의 비트는 삭제되고

01011000:88 이 되겠죠

오른쪽 시프트 연산자 >>

ex) 150 >> 2 : 150의 이진값을 오른쪽으로 2칸 시프트

10010110 -> 1110010110

11100101 이 됩니다.

오른쪽으로 2비트 이동 후 비게되는 왼쪽의 2개비트는 1로 채워지고 오른쪽에서 2비트 넘어간 부분은 삭제

따라서 결과는 아래가 됩니다.

단 무조건 왼쪽에 비는 부분이 1로 채워지는 것이 아니라 밀기전 최초 첫째라리 값(MSB)과 동일한 값으로 채워집니다.

논리 오른쪽 시프트 연산자 >>>

오른쪽으로 2비트 시프트 합니다.

밀리는 앞쪽 2비트를 무조건 0으로 채워넣습니다.

10010110 >> 2 -> 0010010110 -> 00100101

'Development > Java' 카테고리의 다른 글

예외처리(Exception)  (0) 2017.08.24
컬렉션 프레임워크(Collection Framework) 란?  (0) 2017.08.08
JVM 메모리 구조 와 가비지 컬렉션(Garbage Collection)  (0) 2017.08.02
Static이란?  (0) 2017.08.02
JSP란?  (0) 2017.08.01
댓글