비트 논리 연산자
| 연산자 | 별칭 | 내용 |
| a & b | AND 연산 | 두 비트 모두 1이면 1, 그렇지 않으면 0 |
| a | b | OR 연산 | 두 비트 모두 0이면 0, 그렇지 않으면 1 |
| a ^ b | XOR 연산 | 두 비트가 다르면 1, 같으면 0 |
| ~ a | NOT 연산 | 1을 0으로, 0을 1로 변환 |
비트 시프트 연산
: 저장 공간의 크기가 정해져 있으므로 시프트되는 방향에 따라 끝에 있는 비트는 사라지게 된다.
| 시프트 연산자 | 내용 |
| a << b | 산술적 왼쪽 시프트: a의 각 비트를 왼쪽으로 b번 시프트한다. 최하위 비트의 빈자리는 항상 0으로 채운다. |
| a >>> b | 논리적 오른쪽 시프트: a의 각 비트를 오른쪽으로 b번 시프트한다. 최상위 비트의 빈자리는 항상 0으로 채운다. |
| a >> b | 산술적 오른쪽 시프트: a의 각 비트를 오른쪽으로 b번 시프트한다. 최상위 비트의 빈자리는 시프트 전의 최상위 비트로 다시 채운다. |
MSB: 최상위 비트, 비트 7
LSB: 최하위 비트, 비트 0
※ 시프트 연산의 피연산자는 byte, short, int, long, char 타입만 가능하고, float, double, boolean은 사용할 수 없다. (시프트연산 시 byte, short, char 타입은 int 타입으로 변환되어 연산이 일어난다.)
🔴 << 연산자의 경우 음수(최상위 비트가 1)를 시프트하여 최상위 비트가 0인 양수가 되는 오버플로(overflow)가 발생할 수 있으므로 주의해야 한다.
증감 연산 예제
int x = 2, y = 10, z = 0;
z = x++ * 2 + --y - 5 + x * (y % 2);
System.out.println(z);
//2 * 2 + 9 - 5 + 3 * (1) = 11'책' 카테고리의 다른 글
| [명품 JAVA Programming] 6일차 (0) | 2023.08.12 |
|---|---|
| [명품 JAVA Programming] 4일차 (0) | 2023.08.09 |
| [명품 JAVA Programming] 3일차 (0) | 2023.08.08 |
| [명품 JAVA Programming] 2일차 (0) | 2023.08.08 |