首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言 char 類型溢出導致輸出 -1 的原理圖解

     編輯:程式設計綜合問答

代碼現象

main() {
    char x = 0xFFFF;
    printf("%d\n", x--); // 輸出 -1
}

逐步解析

1. 賦值截斷

  • char 佔 1 字節(8 位),範圍 0~255(無符號)或 -128~127(有符號)
  • 0xFFFF 二進制為 16 個 1:1111 1111 1111 1111
  • 截取低 8 位 → 1111 1111(十進制 255,十六進制 0xFF)

2. printf 以有符號解讀

  • 格式符 %d 將內存按 有符號整數 解讀
  • 1111 1111 作為 8 位有符號數:最高位 1 表示負數
  • 補碼轉原碼:取反 0000 0000 + 1 = 0000 0001 → 數值 1
  • 加負號 → -1

3. 後置遞減不影響本次輸出

x-- 先使用當前值參與表達式求值,再將 x 變為 -2(即 0xFE),故本次 printf 仍輸出 -1。

關鍵知識點總結

概念說明
char 寬度1 byte = 8 bits
0xFFFF 截斷保留低 8 位 → 0xFF (255)
%d 解讀按有符號補碼讀取 → -1
後置 --先用後改,本次輸出不變

若需輸出 255,請使用 unsigned char 配合 %u 或 %hhu。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved