반응형
비트연산시 실수
아래 코드를 보자.
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 |