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

C語言整型數據全解析:分類、存儲、進制表示、溢出與類型轉換實戰

     編輯:關於C語言

整型是 C 語言最基礎、最高效的數據類型。本文系統梳理整型分類(基本/短/長/無符號)、內存存儲(補碼機制)、三種進制書寫規則、後綴用法、溢出行為及混合類型運算中的自動轉換,配合圖解與實測代碼,構建完整整型知識體系。

整型家族譜系

類型關鍵字別名典型佔用有符號範圍 (16/32 位系統差異大)無符號範圍
int基本整型2/4 字節-32768~32767 / -2147483648~21474836470~65535 / 0~4294967295
short / short int短整型2 字節-32768~327670~65535
long / long int長整型4/8 字節-2147483648~2147483647 / 更大0~4294967295 / 更大
unsigned / unsigned int無符號基本型同 int—同 int 無符號範圍
unsigned short無符號短整型2 字節—0~65535
unsigned long無符號長整型4/8 字節—同 long 無符號範圍

注意:C 標準僅規定 short ≤ int ≤ long,**具體字節數視實現而定**。現代 64 位 Linux/Windows 常見 int=4、long=4/8、long long=8。<limits.h> 定義 INT_MAX 等宏供可移植查詢。

內存存儲:補碼表示法

  • 正數:補碼 = 原碼(最高位 0)。
  • 負數:補碼 = 絕對值二進制**按位取反 + 1**(最高位 1)。
  • 範例:-10 (16 位) → 10000000 00001010 (原碼) → 11111111 11110101 (取反) → 11111111 11110110 (+1) = 0xFFF6。
  • 無符號類型無符號位,全位參與數值表示,範圍翻倍但無負數。

三種進制書寫規則與後綴

進制前綴合法數碼示例 (十進制值)非法示例
十進制無0-9237 -568 65535023 (不可前導 0)、23D
八進制00-7015(13) 0177777(65535)256 (無前綴)、03A2、-0127 (不可負號)
十六進制0x/0X0-9, A-F/a-f0x2A(42) 0xFFFF(65535)5A (無前綴)、0x3H

後綴:L/l → long;U/u → unsigned;可組合 0xA5Lu (無符號長十六進制)。

整型溢出:未定義 vs 實現定義

  • 無符號溢出:**定義良好**,模 2^N 環繞(UINT_MAX + 1 = 0)。
  • 有符號溢出:C 標準屬**未定義行為 (UB)**,編譯器可假設不發生並優化。實際上多數平台採用補碼環繞(INT_MAX + 1 = INT_MIN),但**不可依賴**。

實測差異示例

// TC2.0 (16 位 int)        // VC6.0 (32 位 int)
int a = 32767;               int a = 32767;
int b = a + 1;  // b = -32768  int b = a + 1;  // b = 32768 (無溢出)
// 改為 a = 2147483647 才會在 VC6.0 見到溢出

混合類型運算與自動轉換

  • 「低」類型提升至「高」類型運算(整型提升 → 常規算術轉換)。
  • 結果類型為較高類型;賦值時再轉回目標類型(可能窄化)。
long x = 5, y = 6;
int a = 7, b = 8;
int c = x + a;  // long + int → long 運算,結果 long → int 賦值 (截斷風險)
int d = y + b;  // 同理

定義與使用最佳實踐

  • 優先用 int 作為通用整數;需明確範圍時用 int32_t/uint32_t 等 (<stdint.h>)。
  • 避免有符號/無符號混合比較(負數會變巨大無符號數);統一用有符號或顯式轉型。
  • 常量加後綴避免隱式截斷:3000000000u、0x100000000ULL。
  • 開啟 -Wconversion -Wsign-conversion -Woverflow 捕獲隱式窄化/溢出。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved