본문 바로가기

[명품 JAVA Programming] 5일차

비트 논리 연산자

연산자 별칭 내용
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