케네스로그

[Java] 쉬프트 연산자 <<, <<< 본문

Dev/Java

[Java] 쉬프트 연산자 <<, <<<

kenasdev 2022. 2. 5. 14:31
반응형

쉬프트 연산자 shift operator

shift v. 옮기다 이동하다

쉬프트 연산자는 비트 표현의 자릿수를 옮기는 연산을 말합니다. 비트 연산자와 마찬가지로 저수준에서 사용할 수 있으며, 2진법 체계의 특성을 응용하여 연산을 할 수 있습니다.

 

왼쪽 쉬프트 연산 <<

int x = 10;
int y = 7;
System.out.println("b's bit exp: " + Integer.toBinaryString(x)); // 1010
System.out.println("y's bit exp: " + Integer.toBinaryString(y)); // 111
System.out.println("x<<1: " + Integer.toBinaryString(x<<1));     // 10100
System.out.println("y<<1 : "+Integer.toBinaryString(y<<1));   // 1110

비트표현에서 왼쪽으로 한칸씩 밀어(shift)서 연산을 수행합니다.

💡 left shirt INSIGHT!!
n만큼 shift연산을 진행하면, 정수값에 2^n을 곱한것과 같은 효과를 보인다.

 

오른쪽 쉬프트 연산 >> 

💡right shift INSIGHT!!
left shift와 반대로, n만큼 shift연산을 하면 2^n을 나눈것과 같은 결과를 보인다.
int x = 10;
int y = 7;
System.out.println("b's bit exp: " + Integer.toBinaryString(x)); // 1010
System.out.println("y's bit exp: " + Integer.toBinaryString(y)); // 111
System.out.println("x>>1: " + Integer.toBinaryString(x>>1));     // 101
System.out.println("y>>1 : "+Integer.toBinaryString(y>>1));   // 11

 

Unsigned 쉬프트 연산 >>>

unsigned shift는 쉬프트 연산 후 밀어버린 부분을 전부 0으로 채워줍니다.

단, >>>연산은 음수를 보장하지 않습니다.

long b = -2147483648 // 1000 0000 0000 0000 0000 0000 0000 0000
System.out.println("b>>>1 : " + Integer.toBinaryString(b >>> 1));
// 0100 0000 0000 0000 0000 0000 0000 0000
System.out.println("b>>>1 : "+(b>>>1)); // 1073741824
System.out.println("b>>>1 : " + Integer.toBinaryString(b >>> 30));
// 0000 0000 0000 0000 0000 0000 0000 0010

 

반응형

'Dev > Java' 카테고리의 다른 글

[Java] 클래스  (0) 2022.02.08
[Java] 관계 연산자, 균등 연산자  (0) 2022.02.05
[Java] 비트연산자 bitwise  (0) 2022.02.04
[Java] 산술연산자  (0) 2022.02.04
[Java] 타입 추론 var  (0) 2022.01.30