java, shift operation

2021-05-16
  • java
  • 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
    

    끝.