dev

비트연산시 실수

재삐신생 2017. 5. 10. 00:28
반응형

비트연산시 실수


아래 코드를 보자.

long longVal = (long)((255 << 24) | (255 << 16) | (255 << 8) | 255);


longVal의 값은 -1 [FF FF FF FF FF FF FF FF] 이다.

long 8바이트 중 비트연산으로 4바이트를 채웠지만, 예상되지 못한 결과를 보여준다.


32비트 환경이라, 비트 연산시 signed int(Int32)로 연산이 되며, 연산 결과는 signed int값으로 -1이므로, 데이터형만 long으로 변경된 것이다.


정상적인 결과를 얻으려면 비트 연산전에 캐스팅을 해줘야 한다.

long longVal = (long)(((long)255 << 24) | ((long)255 << 16) | ((long)255 << 8) | (long)255);



반응형

'dev' 카테고리의 다른 글

PHP PDO를 써야하는 이유 중 하나  (0) 2017.06.19
부호확장(sign extension)  (0) 2017.05.10
콜백  (0) 2017.05.06
버퍼풀  (0) 2017.05.05
Ring buffer(Circular buffer) 고찰  (0) 2017.04.19