글 수 162
가끔 이렇게 신기한거 발견하고, 그냥 넘어갈때가 많은데 ...
물어볼 고수분들이 있으니 ... 좋네요 ㅋㅋㅋ
if(szResult[nPos] < 0xcc || 0xf6 < szResult[nPos])
or
if((szResult[nPos] & 0xff) < 0xcc || 0xf6 < (szResult[nPos] & 0xff))
어떤 값을 받아서 처리하는데 ...
if(szResult[nPos] < 0xcc || 0xf6 < szResult[nPos])
위 처럼 하면 false 임에도 불구하고 true 가 되고,
if((szResult[nPos] & 0xff) < 0xcc || 0xf6 < (szResult[nPos] & 0xff))
이렇게 처리하면 제대로 나옵니다 ...
원래 szResult[nPos] 에는 1 byte의 값이 들어가 있습니다.
저 & 연산을 해주면, 뭐가 어떻게 바뀌길래 그런건가요 ??? (매우 신기하네요 ㅋ)
또 (szResult[nPos] & 0x0ff) or szResult[nPos] & 0xff
위의 2개도 서로 값이 다르게 나올때도 있고, 그러던데 이유가 뭔가요 ?
개발 환경은 SUN SPARC 10 입니다(Big Endian)
szResult가 char 타입의 배열이라면
sign extension에 의한 문제일 것입니다.