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

C 語言整數類型範圍查詢完全手冊:limits.h 實戰

     編輯:關於C語言

核心頭文件:<limits.h>

ANSI C 標準在 <limits.h> 定義了所有整數類型的極值宏,直接 #include 即可使用,無需手動計算。

常用極值宏速查表

宏名稱含義典型值(32位系統)
CHAR_BITchar 位數8
CHAR_MAX / CHAR_MINchar 有符號極值127 / -128
SCHAR_MAX / SCHAR_MINsigned char 極值127 / -128
UCHAR_MAXunsigned char 最大值255
SHRT_MAX / SHRT_MINshort 極值32767 / -32768
USHRT_MAXunsigned short 最大值65535
INT_MAX / INT_MINint 極值2147483647 / -2147483648
UINT_MAXunsigned int 最大值4294967295
LONG_MAX / LONG_MINlong 極值同 int 或 64位下更大
ULONG_MAXunsigned long 最大值同上
LLONG_MAX / LLONG_MIN (C99)long long 極值9223372036854775807 / -9223372036854775808
ULLONG_MAX (C99)unsigned long long 最大值18446744073709551615

實戰示例:打印所有極值

#include <stdio.h>
#include <limits.h>

int main() {
    printf("char:   [%d, %d]\n", CHAR_MIN, CHAR_MAX);
    printf("short:  [%d, %d]\n", SHRT_MIN, SHRT_MAX);
    printf("int:    [%d, %d]\n", INT_MIN, INT_MAX);
    printf("long:   [%ld, %ld]\n", LONG_MIN, LONG_MAX);
    printf("llong:  [%lld, %lld]\n", LLONG_MIN, LLONG_MAX);
    printf("uchar:  [0, %u]\n", UCHAR_MAX);
    printf("ushort: [0, %u]\n", USHRT_MAX);
    printf("uint:   [0, %u]\n", UINT_MAX);
    printf("ulong:  [0, %lu]\n", ULONG_MAX);
    printf("ullong: [0, %llu]\n", ULLONG_MAX);
    return 0;
}

底層原理:二補數與範圍計算

現代機器均採用二補數表示有符號整數。對於 N 位類型:

  • 有符號範圍:[-2^(N-1), 2^(N-1)-1]
  • 無符號範圍:[0, 2^N-1]

例:16 位有符號 short → [-32768, 32767];無符號 unsigned short → [0, 65535](即 0xFFFF)。

進階技巧

  1. 編譯期斷言檢查:static_assert(INT_MAX == 2147483647, "int 必須 32 位");
  2. 跨平台格式化輸出:使用 <inttypes.h> 的 PRId32、PRIu64 等宏,避免 %d/%lld 不匹配。
  3. 寬度精確類型:優先用 int32_t、uint64_t(<stdint.h>),對應極值宏為 INT32_MAX 等。

避坑指南

  • char 有符號性未定義:嚴格區分 signed char / unsigned char,不要假設 char 是有符號。
  • long 在 64 位 Linux/macOS 上是 64 位,Windows 上是 32 位,切勿假設大小。
  • 移位運算 1 << 31 在 32 位有符號 int 上是未定義行為,用 1u << 31 或 INT32_C(1) << 31。

善用 <limits.h> 和 <stdint.h>,讓類型範圍查詢變得標準、可移植、零成本。

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