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

C++ 基礎概念與學習指南(二):內建型別完整解析

     編輯:C++ 入門

為什麼所有語言都有相似的基本型別?

因為 CPU 硬體直接支援:**整數運算**(ALU)、**浮點運算**(FPU/SSE/AVX)、**邏輯/位運算**、**記憶體位址運算**。語言的基本型別本質上是對硬體資料寬度與編碼方式的薄封裝。

C++ 內建型別分類表

類別關鍵字大小 (典型 64 位)範圍 / 精度備註
布林bool1 bytetrue/false實際佔 1 byte,非 1 bit
整數 (有號/無號)signed char / unsigned char1 byte-128~127 / 0~255常用於小整數或原始位元組
short / unsigned short2 bytes-32,768~32,767 / 0~65,535
int / unsigned int4 bytes-2,147,483,648~2,147,483,647 / 0~4,294,967,295預設整數型別
long / unsigned long4/8 bytes視平台(Windows 64 位為 4,Linux 64 位為 8)**不可假設大小**
long long / unsigned long long8 bytes-9.22e18~9.22e18 / 0~1.84e19C++11 保證 ≥ 64 位
wchar_t2/4 bytes0~65,535 / 0~4,294,967,295寬字元,UTF-16/UTF-32
char8_t (C++20)1 byteUTF-8 代碼單元
char16_t / char32_t (C++11)2/4 bytesUTF-16/UTF-32 代碼點
浮點數float4 bytes~7 位有效數字,範圍 ±3.4e38IEEE 754 single
double8 bytes~15 位有效數字,範圍 ±1.7e308預設浮點字面值型別
long double8/10/16 bytes平台相關,通常 ≥ doublex86 常為 80 位擴展精度
無值void0不可實例化用於函數無返回、泛型指標 void*

修飾符組合規則

  • signed/unsigned:僅改變解釋方式,**不改變大小**
  • short/long:改變大小(實際大小仍由實現定義)
  • 可組合:unsigned long long, signed short int 等
  • int 可省略:short == short int, long == long int

字面值後綴

123       // int
123u      // unsigned int
123l      // long
123ll     // long long
123ull    // unsigned long long
3.14f     // float
3.14      // double
3.14l     // long double
'c'       // char
L'c'      // wchar_t
u8"str"   // char8_t[] (C++20)
u"str"    // char16_t[]
U"str"    // char32_t[]

查詢當前平台型別屬性(編譯期)

#include <iostream>
#include <limits>
#include <cstdint>

int main() {
    cout << "int: " << sizeof(int) << " bytes, "
         << numeric_limits::min() << " ~ "
         << numeric_limits::max() << '\n';
    cout << "double: " << sizeof(double) << " bytes, "
         << "digits10=" << numeric_limits::digits10 << '\n';
    // 固定寬度型別 (C++11)
    int32_t i32 = 0;  // 保證 32 位
    int64_t i64 = 0;  // 保證 64 位
    return 0;
}

常見坑點

  1. 假設 long 是 64 位:Windows 64 位下為 32 位,用 int64_t 或 long long
  2. char 有號性未定義:可能是 signed char 或 unsigned char,做算術時明確指定
  3. 浮點數直接比較相等:用 abs(a-b) < epsilon
  4. 整數提升導致意外無號比較:unsigned int + signed int → unsigned,負數變大正數

結語

熟悉內建型別大小、範圍、轉換規則,是寫出正確、可移植、高效 C++ 代碼的基石。現代 C++ 偏好使用 <cstdint> 固定寬度型別(int32_t, uint64_t 等)明確表達意圖,避免平台差異。

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