Phantom

비트 연산자 본문

프로그래밍에 대한 정보들/Java

비트 연산자

Ph4nt0m_ 2013. 4. 21. 18:41
반응형

드디어 고난이 온걸까요? ㅋㅋㅋㅋㅋ비트연산자 이해가 안될뻔 했는데 다행히 이해가 됬네요 ㅋㅋ 하나땜에 괜히고생햇네 ㅋㅋ 난독증있나봐요....

뭐 아무튼 비트연산자 시작합시다(__)


1. & - AND 연산자

사용법 - 값1 & 값2

값1과 값2의 비트 단위의 논리곱 연산


2. | - OR 연산자

사용법 - 값1 | 값2

값1과 값2의 비트 단위의 논리합 연산


3. ^ - XOR 연산자

사용법 - 값1 ^ 값2

값1과 값2의 비트 단위의 배타적 논리합 연산


4. ~ - NOT 연산자

사용법 - ~값

값의 비트 단위의 보수 연산


5. << - 왼쪽 쉬프트 연산자

사용법 - 값1 << 값2

자바의 쉬프트 연산자는 C언어처럼 로테이션 되는게 아니라 맨 끝의 쉬프트된 비트가 사라지는 것입니다.

따라서 0으로 채워집니다.


6. >> - 오른쪽 쉬프트 연산자

사용법 - 값1 >> 값2

쉬프트시키려고 하는 숫자가 음수일 경우에는 0으로 채워지는것이 아니라 sign비트(부호비트)로 채워집니다.

왜냐하면 쉬프트 시킨 후에도 음수값이 유지 되어야 하기 때문입니다.


7. >>> (Unsigned Right Shift)

사용법 - 값1 >>> 값2

>>>연산자는 >>연산자처럼 쉬프트시키려고하는 수가 음수이건 상관없이 무조건 0으로 채워지는 연산자 입니다.

자바는 unsigned 타입이 없기때문에 C언어에는 없는 >>> 연산자를 제공해 unsigned 효과를 나타냅니다.


쉬프트 연산자 사용시 주의점


1. 기본타입의 연산자(int, long, short)와 char연산자 타입에 적용해서 사용할 수 있는데,

이때 int 보다 작은 데이터들은 자동으로 int로 변환된 후 결국 int로 쉬프트합니다.


그래서 byte타입과 같이 int보다 작은 데이터 타입들은 >>> 후에 무조건 양수가 되지않고 음수가 되는 경우도 있습니다.

ex) byte b= -1;

b = b >>> 2;        //오류 발생!!!


2. 쉬프트 연산식은 이동할 자리수,

즉, 오른쪽 항이 항상 int일 경우는 %32, long일 경우는 %64로 나머지 연산식을 처리한 나머지를 갖고 쉬프트를 합니다.


만약 int 타입에 35자리만큼 쉬프트하라하면

결과적으로 3자리만큼 쉬프트 하게 됩니다.

반응형

'프로그래밍에 대한 정보들 > Java' 카테고리의 다른 글

for, while, do-while의 구분  (0) 2013.04.22
[Tip] switch문 쓸때  (0) 2013.04.22
자바의 비트연산자 이용  (0) 2013.04.21
[Tip] 산술 연산의 결과 타입  (0) 2013.04.21
자바의 플랫폼  (0) 2013.04.21
Comments