2011년 12월 7일 수요일

signed 와 unsigned 의 비교

그냥 ubuntu gcc로 compile 할 때는 멀쩡하던 것이
android 용으로 ndk-build 를 써서 빌드하니까 엄청난 warning 들이 나왔다.
다른 것들은 뭐 initialize 안한 것 부터해서 그냥 휙휙 고치면 되는 것들이었는데...

warning: comparison between signed and unsigned integer expressions
이 녀석은 조금 골치가 아프다. 아...놔... 누굴까 대체...

그래서!

int 와 unsigned int 를 비교하면 어떻게 되는지 실험해보기로 했다.

구글링으로도 잘 안나오더라...OTL
환경은 64bit ubuntu...그냥 int는 4byte, long은 8byte 이다... 혹시나 해서ㅎ

기억하던대로(?)

int i = -1  는 0xffffffff
unsigne int ui = -1 도 0xffffffff (unsigned 에 -1 넣어도  warning 없이 compile 잘 되는구나;;;)

비교하면 그냥 같다고 나오는구나...
걍 bit 배열만 보고 판단하는 구나.. 그랬구나 OTL 허무...

자 이제 ... 누군가

int x = -1 이라고 하고
unsigned int y 로 받아온 값을 비교하는데..

if( x == y ) goto error;
라고 적어둔 식에서 위에 경고가 뜨는 걸
그냥 type casting 으로 없애도 되는가에 대한 결론을 내보자.

재수없이 y 에 0xffffffff 가 들어왔다면?!
하아 -_-... error 겠구만... 잘 발견하기도 어려운...
일단은 0xffffffff은 안들어오는 것이 보장되는 것 같으니 일단은 type casting 만 하고 넘어간다.



블로그 시작

나도 뭐라도 남겨야 겠다.
이 사진의 이상한 점은?!ㅋㅋㅋ

Code Reading (오픈소스 관점에서 본 코드 읽기) 책 정리

쓸만한 것들

#define STREQ(a,b) (*(a)==*(b) && strcmp((a), (b) == 0)

- strcmp 을 if 문에 넣을 경우 if(!strcmp(a,b)) 가 a, b가 같을 경우라서 보기 안좋았는데,
위와 같이 매크로를 만들어 쓰면 깔끔해진다. 헐... 게다가 첫 문자가 다를 경우 바로 다르다고 뒤를 생략 할 수 있으니 미미한(?) 최적화 효과도 기대해 볼 수 있다.