謹記:在C語言中,當兩種不同類型之間運算時,低字節長度類型會向高自己長度類型轉換,有符號會向無符號類型轉換。
舉例子如下:
#include <stdio.h>
void func(void)
{
int i = 1;
unsigned char c1 = 1;
signed char c2 = -1;
if (c2 > i){
printf("\r\n -1 > 1");
}
else{
printf("\r\n -1 <= 1");
}
if (c2 > c1){
printf("\r\n -1 > 1");
}
else {
printf("\r\n -1 <= 1");
}
printf ("\n");
}
int main()
{
func();
return 0;
}
輸出:
-1 <= 1
-1 <= 1
當C2與i進行比較時,由於C2是有符號8位,i是無符號32位,根據C語言的規則,c2被轉換成32位,即-1的補碼,故會得出-1>1的結論。
而後面一個-1<1的情況是 c2轉化成無符號8位整數,即255,255, 所以大於1。