Java  연산자

시프트 연산자

 

시프트 연산은 대상 필드의 값을 비트로 바꾼 후 비트 수만큼 이동시켜서 값을 얻는 연산이다.

이연산은 boolean, float, double 형의 경우는 사용할 수 없다.

 

1 .left shift 연산자 ( <<)

<< left shift 연산자는 대상 필드의 값을 2진 비트로 바꾼 후에 왼쪽으로 특정 비트 수만큼 이동 시키고 빈자리는 0으로 채우는 연산자이다.

 

다음 예제로 확인해 보자

 

1 << 5

 

1을 32비트로 분해시켜서 왼쪽으로 5bit 이동 시키라는 뜻이다.

 

연산과정은

0000 0000 0000 0000 0000 0000 0000 0001

 

0000 0000 0000 0000 0000 0000 0010 0000

 

값은 32가 된다.

 

 

2. right shift 연산자(>>)

>> right shift 연산자는 대상 필드의 값을 2진수로 바꾼 후 오른쪽으로 특정 비트 수만큼 이동시키고 빈자리는 양수일때 0, 음수일때는 1로 채우는 연산자이다.

 

다음 예제로 확인해 보자

32 >> 5  

 

 

32를 32비트로 분해시켜서 오른쪽으로 5bit 이동시키라는 연산이다.

연산과정은

 

0000 0000 0000 0000 0000 0000 0010 0000

 

0000 0000 0000 0000 0000 0000 0000 0001

 

값은 1이된다.

 

 

3, Unsigned right shift 연산자 (>>>)

 

>>> unsigned right shift 연산자는 >> 연산과 원리는 같다. 그러나 원본데이터네 상관없이 앞쪽의 비트를 0값으로 채운다.

이연산을 사용하면 원본데이터에 상관없이 결과는 무조건 uinsigned 로 나타난다.

 

-16 >> 4

 

1111 1111 1111 1111 1111 1111 1111 0000

 

0000 1111 1111 1111 1111 1111 1111 1111

 

값은 268435455 가 된다.

 

기존 >> 연산자를 사용했을 때에는

 

1111 1111 1111 1111 1111 1111 1111 0000

 

1111 1111 1111 1111 1111 1111 1111 1111

 

으로 값은 -1 이된다.