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 short,small 換成 short,結果又是如何?
unsigned short big = 0x9090;
short small = -1;
答案是 big > small。
這是因為 big 和 small 都被轉成 int 了,所以 big 仍然大於 small。



沒有留言:
張貼留言