java, shift operation
2021-05-16
java 에는 bit shift 연산자가 있는데, >>
, <<
, >>>
가 있다.
<<<
는 없다.
>>
, <<
는 부호에 영향을 주지 않고 bit 를 shift 한다.
>>
의 경우, shift 한 빈 자리를 부호와 같은 bit 로 채워 넣는다.
+16 >> 1 = +8
+16 >> 2 = +4
+16 << 1 = +32
+16 << 2 = +64
-16 >> 1 = -8
-16 >> 2 = -4
-16 << 1 = -32
-16 << 2 = -64
>>>
는 오른쪽으로 shift 할 때, 왼쪽에 남는 bit 에 0 을 채워넣는다.
부호비트는 최상위 비트이고 왼쪽에 있기 때문에 <<<
가 있을 이유가 없는 것이다.
위와 같은 성질 떄문에 음수를 shift 하는 경우 값이 많이 변경된다.
+16 >>> 1 = +8
+16 >>> 2 = +4
-16 >>> 1 = 2147483640
-16 >>> 2 = 1073741820
마찬가지 성질을 이용하여 int 의 max value 를 아래와 같이 구할 수 도 있다.
-1 >>> 1 = 2147483647
Integer.MAX_VALUE = 2147483647
끝.