2005/05/04

Compare signed and unsigned integer expression

在 compile C 程式碼的時候可能會出現這個 warning,代表什麼意思呢?
讓我們來看一個例子:

unsigned int big = 0x90909090;
int small = -1;
printf("big %c small", big > small? '>' : '<');

你猜會輸出什麼?答案是 big < small。
這是因為 small 轉成 unsigned int 之後變成 0xFFFFFFFF,而大於 0x90909090。

那如果把 big 換成 unsigned shortsmall 換成 short,結果又是如何?

unsigned short big = 0x9090;
short small = -1;

答案是 big > small。
這是因為 bigsmall 都被轉成 int 了,所以 big 仍然大於 small

沒有留言: