首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言算術轉換規則實例解析:char 相加溢出與提升機制

     編輯:關於C

整數提升規則

char/short`_Bool/枚舉` 參與運算先提升為 int(或 unsigned int),運算完成後再截断賦值回目標類型。

案例一:有符號 char 溢出


char c1 = 128;  // 二進制 1000 0000,補碼表示 -128
char c2 = 1;    // 0000 0001
char c3 = c1 + c2;
printf("%d\n", c3);  // 輸出 -127

過程:

  1. c1 提升為 int:-128(符號擴展)。
  2. c2 提升為 int:1。
  3. 相加:-127。
  4. 截断賦值給 char:保留低 8 位 1000 0001,補碼仍為 -127。

案例二:無溢出正常相加


char c1 = 12;   // 0000 1100
char c2 = 1;    // 0000 0001
char c3 = c1 + c2;
printf("%d\n", c3);  // 輸出 13

關鍵結論

  • char 是否有符號由實現定義,攜帶負值時行為不同。
  • 算術運算總在 int 或更寬類型上進行,最終賦值時截断。
  • 有符號溢出是未定義行為(UB),但賦值截断是定義行為。
  • 嚴謹代碼應顯式轉型:char c3 = (char)(c1 + c2); 明確意圖。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved