- Today
- Total
Phantom
비트 연산자 본문
드디어 고난이 온걸까요? ㅋㅋㅋㅋㅋ비트연산자 이해가 안될뻔 했는데 다행히 이해가 됬네요 ㅋㅋ 하나땜에 괜히고생햇네 ㅋㅋ 난독증있나봐요....
뭐 아무튼 비트연산자 시작합시다(__)
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 |