謹記:在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。