表達式中不同類型運算,範圍小的向範圍大的轉換。無符號範圍大於同位寬有符號(因無符號無負值位)。
char/short → int(整數提升)unsigned char/short → unsigned intint val = -15;
unsigned int value = 13;
int sum = value + val; // val 隱式轉 unsigned int → 巨大正數
printf("%d\n", sum); // 輸出 4294967294 (視為有符號 -2)
-15 作為 unsigned int 是 4294967281,加 13 得 4294967294,賦值給 int sum 截斷為 -2。
if (signed_var < unsigned_var) 先轉型char 有符號性未定義,用 unsigned char 處理原始字節-Wsign-compare -Wsign-conversion -Wconversion/W4 含隱式轉換警告