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

C++ 資料型別完整指南:大小、範圍、帶號與型別轉換陷阱

     編輯:關於C++

為什麼 C++ 必須宣告型別?

BASIC 等動態語言自動推斷,但 C++ 為了編譯期型別安全、精確記憶體佈局、效能可預測,強制程式設計師明確指定:

int x1 = 1;
int x2 = 1000;
float y = 3.14f;
long z = 457000L;

32 位元環境標準型別表

型別位元組範圍
char1-128 ~ 127
unsigned char10 ~ 255
short2-32,768 ~ 32,767
unsigned short20 ~ 65,535
long / int4-2,147,483,648 ~ 2,147,483,647
unsigned long / unsigned int40 ~ 4,294,967,295
float4±1.2E-38 ~ ±3.4E+38 (約 7 位有效數字)
double8±2.2E-308 ~ ±1.8E+308 (約 15 位有效數字)
bool1true / false

註:32 位元系統下 int 與 long 同為 4 bytes,16 位元時代 int 為 2 bytes,此為歷史遺留。

型別轉換:隱式與顯式的生死邊緣

自動轉換(隱式)

short result;
long a = 200, b = 200;
result = a * b; // 40,000 → 截斷為 -25,536 (溢位環繞)

short 最大 32,767,40,000 超出 → 環繞(如里程表 99999→00000)。

實測環繞

short x = 32767;
cout << x << endl; // 32767
x++;
cout << x << endl; // -32768 (非 32768!)

編譯器警告 = 錯誤

  • Cannot convert from X to Y:硬性錯誤。
  • Conversion might lose significant digits:警告,視同錯誤處理,必須修正或顯式轉型。

顯式轉型最佳實踐

result = static_cast<short>(a * b); // 明確告知編譯器:我知道在做什麼
// 或 C 風格 (不推薦)
result = (short)(a * b);

現代 C++ 偏好 static_cast、reinterpret_cast 等具名轉型,語義清晰、可搜尋、可審計。

bool 型別特殊說明

C++ Builder / Borland C++ 5.0 中 bool 為真正型別;舊編譯器可能僅 typedef int bool。標準 C++ 保證 sizeof(bool) == 1 且值僅 true/false。

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