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

C 語言整型、字元與浮點型擴展關鍵字:short、long、long long、signed、unsigned 完全解析

     編輯:關於C語言

類型修飾關鍵字組合規則

基礎類型:`int`, `char`, `float`, `double`。
修飾詞:`short`, `long`, `signed`, `unsigned`。
可組合 (順序通常不影響語義,慣例:`signed/unsigned` 在前)。

整數類型完整表 (C99/C11 標準最小寬度保證)

類型別名完整聲明最小位寬典型 64 位系統 (LP64)格式字串
`short` / `short int``signed short int`1616 位`%hd` / `%hi`
`unsigned short``unsigned short int`1616 位`%hu`
`int` / `signed``signed int`1632 位`%d` / `%i`
`unsigned` / `unsigned int``unsigned int`1632 位`%u`
`long` / `long int``signed long int`3264 位 (Linux) / 32 位 (Windows)`%ld`
`unsigned long``unsigned long int`3264/32 位`%lu`
`long long` / `long long int``signed long long int`6464 位`%lld`
`unsigned long long``unsigned long long int`6464 位`%llu`

關鍵差異:`long` 在 Windows 64 位 (LLP64) 為 32 位,Linux/macOS 64 位 (LP64) 為 64 位。**跨平台必須用 `` 定寬類型 (`int32_t`, `int64_t`)。**

字元類型

類型說明範圍 (典型 8 位)
`char`實現定義有號性 (ARM 通常無號, x86 通常有號)-128~127 或 0~255
`signed char`明確有號 8 位整數-128 ~ 127
`unsigned char`明確無號 8 位整數 / 位元組類型0 ~ 255

用途區分:文字用 `char`;數值/位運算/緩衝區用 `uint8_t` (`unsigned char`)。

浮點類型

類型最小位寬IEEE 754 典型精度 (十進制有效位)範圍約略
`float`32binary32 (單精度)~6-7 位±1.2e-38 ~ ±3.4e38
`double`64binary64 (雙精度)~15-17 位±2.3e-308 ~ ±1.7e308
`long double`≥64x86: 80 位擴展精度
ARM64/Power: 128 位 quadruple
MSVC: 同 double (64)
~19-33 位極大

注意:`long double` 精度與大小**高度依賴平台/ABI**。`printf` 格式為 `%Lf` / `%Le` / `%Lg`。

標準極值宏 (``, ``)


// 整數
SHRT_MIN, SHRT_MAX, USHRT_MAX
INT_MIN, INT_MAX, UINT_MAX
LONG_MIN, LONG_MAX, ULONG_MAX
LLONG_MIN, LLONG_MAX, ULLONG_MAX (C99)

// 浮點
FLT_MIN, FLT_MAX, FLT_DIG (精度位數)
DBL_MIN, DBL_MAX, DBL_DIG
LDBL_MIN, LDBL_MAX, LDBL_DIG

範例:查詢當前平台類型屬性


#include 
#include 
#include 

int main() {
    printf("=== 整數 ===\n");
    printf("short:      %d ~ %d (size %zu)\n", SHRT_MIN, SHRT_MAX, sizeof(short));
    printf("int:        %d ~ %d (size %zu)\n", INT_MIN, INT_MAX, sizeof(int));
    printf("long:       %ld ~ %ld (size %zu)\n", LONG_MIN, LONG_MAX, sizeof(long));
    printf("long long:  %lld ~ %lld (size %zu)\n", LLONG_MIN, LLONG_MAX, sizeof(long long));
    printf("unsigned long long max: %llu\n", ULLONG_MAX);

    printf("\n=== 字元 ===\n");
    printf("char: %d ~ %d (signed? %d)\n", CHAR_MIN, CHAR_MAX, CHAR_MIN < 0);
    printf("signed char: %d ~ %d\n", SCHAR_MIN, SCHAR_MAX);
    printf("unsigned char: 0 ~ %u\n", UCHAR_MAX);

    printf("\n=== 浮點 ===\n");
    printf("float:      %e ~ %e (digits %d, size %zu)\n", FLT_MIN, FLT_MAX, FLT_DIG, sizeof(float));
    printf("double:     %e ~ %e (digits %d, size %zu)\n", DBL_MIN, DBL_MAX, DBL_DIG, sizeof(double));
    printf("long double: %Le ~ %Le (digits %d, size %zu)\n", LDBL_MIN, LDBL_MAX, LDBL_DIG, sizeof(long double));
    return 0;
}

總結:現代 C 類型選擇指南

  1. 通用整數:`int` (循環計數、小數值)、`long`/`long long` (大數值、檔案大小、時間戳)。
  2. 跨平台/網路/二進制協議/硬體:**只用 ``**:`int8_t`, `uint16_t`, `int32_t`, `uint64_t`, `intptr_t`, `size_t` (陣列索引/大小)。
  3. 字元處理:文字 `char`;位元組/數值 `uint8_t`。
  4. 浮點數:預設 `double` (精度足夠、速度快、庫函數支援好);記憶體/頻寬受限大陣列用 `float`;極高精度/金融/科學計算評估 `long double` (注意可移植性)。
  5. 格式字串**:整數用 `` `PRId32`, `PRIu64` 等宏;浮點用 `%f`/`%e`/`%g` (`double`)、`%Lf` (`long double`)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved