[자바] Bit Shift간단 정리(비트 조작)

프로그래밍/자바2021. 4. 15. 14:51

1. << (Left Shift)

간단하게 모든 비트를 왼쪽으로 이동 시킴

 

//양수 테스트
int a = 1073741824+1; // 0100 0000 0000 0000 0000 0000 0000 0000 0001
a = a << 1; //1000 0000 0000 0000 0000 0000 0000 0010(10진수로 -2147483646의 값)

//음수 테스트
int a = -2147483646; // 1000 0000 0000 0000 0000 0000 0000 0010
a = a << 1; //0000 0000 0000 0000 0000 0000 0000 0100 (10진수로 4의 값)

 

2. >> (Arithmetic/Signed Right Shift)

부호의 정보를 담은 MSB를 제외한 나머지 비트를 오른쪽으로 이동시킴

MSB 바로 오른쪽 비트의 값이 MSB와 같은 값이 되는 것을 유의

 

양수든 음수든 1칸 비트를 이동시킬 때마다 값이 약 절반으로 줄어드므로 Arithmetic Right Shift라 불립니다.

양수나 음수 모두 잘 적용되기에 Signed Right Shift라고도 불리는 것 같네요.

//양수 테스트
int a = 1073741824+1; // 0100 0000 0000 0000 0000 0000 0000 0000 0001
a = a >> 1; //0010 0000 0000 0000 0000 0000 0000 0000 (10진수로 536870912의 값)

//음수 테스트
int a = -2147483646; // 1000 0000 0000 0000 0000 0000 0000 0010
a = a >> 1; //1100 0000 0000 0000 0000 0000 0000 0001 (10진수로 -1073741823의 값)

 

3. >>> (Logical/Unsigned Right Shift)

부호의 정보를 담은 MSB도 다른 비트와 동일하게 모두 오른쪽으로 이동시킴

//양수 테스트
int a = 1073741824+1; // 0100 0000 0000 0000 0000 0000 0000 0000 0001
a = a >>> 1; //0010 0000 0000 0000 0000 0000 0000 0000 (10진수로 536870912의 값)

//음수 테스트
int a = -2147483646; // 1000 0000 0000 0000 0000 0000 0000 0010
a = a >>> 1; //0100 0000 0000 0000 0000 0000 0000 0001 (10진수로 1073741825의 값)

 

음수인 경우는 모든 비트를 1칸씩 옮기면 값이 약 절반으로 줄어드는 게 아니므로 Arithmetic이 아닙니다.

양수인 경우에만 비트를 1칸씩 옮길 때 값이 약 절반으로 줄어드므로 Logical/Unsigned Right Shift라고 불리네요.

작성자

Posted by 드리머즈

관련 글

댓글 영역