C 語言中 char 是否有號視實現定義,但參與運算時會提升為 int,結果再截斷存回 char。以下兩例展示溢出行為。
#include <stdio.h>
int main() {
char c1 = 128; // 假設 char 有號,128 超出範圍,實際位模式 10000000 = -128
char c2 = 1;
char c3 = c1 + c2; // 提升為 int 運算:-128 + 1 = -127,截斷存回 char
printf("%d\n", c3); // 輸出 -127
return 0;
}
結果:-127
#include <stdio.h>
int main() {
char c1 = 12;
char c2 = 1;
char c3 = c1 + c2; // 12 + 1 = 13
printf("%d\n", c3); // 輸出 13
return 0;
}
結果:13
char/short 運算前自動轉 int。signed char 或 unsigned char 避免歧義。