C# 提供 9 種整數類型 (含 char 共 10 種),按**有無符號**與**位寬**劃分。理解每種類型的取值範圍、內存佔用、隱式/顯式轉換規則,是寫出健壯數值代碼的基礎。
| 關鍵字 | .NET 類型 | 有符號 | 位寬 | 最小值 | 最大值 |
|---|---|---|---|---|---|
| sbyte | System.SByte | 是 | 8 | -128 | 127 |
| byte | System.Byte | 否 | 8 | 0 | 255 |
| short | System.Int16 | 是 | 16 | -32,768 | 32,767 |
| ushort | System.UInt16 | 否 | 16 | 0 | 65,535 |
| int | System.Int32 | 是 | 32 | -2,147,483,648 | 2,147,483,647 |
| uint | System.UInt32 | 否 | 32 | 0 | 4,294,967,295 |
| long | System.Int64 | 是 | 64 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
| ulong | System.UInt64 | 否 | 64 | 0 | 18,446,744,073,709,551,615 |
char (System.Char) 為無符號 16 位,範圍 0~65535,專用於 Unicode 字符,不建議用作數值運算。
C# 整數運算**默認在 unchecked 上下文**中運行:溢出**截斷高位** (模 2N 環繞),**不拋異常**。
short x = 32766;
x++; // 32767
x++; // -32768 (溢出環繞)
Console.WriteLine(x); // 輸出 -32768
若需捕獲溢出,用 checked 關鍵字或編譯器選項 /checked+:
checked {
short y = 32767;
y++; // 拋 OverflowException
}
int (若超範圍則 long)。U/u → uint/ulong;L/l → long/ulong;UL/ul → ulong。0x、二進制 0b (C# 7.0+) 支持同上後綴。| 來源 → 目標 | 隱式 | 備註 |
|---|---|---|
| byte → short/int/long/float/double/decimal | ✓ | 無符號擴展 |
| sbyte → short/int/long/float/double/decimal | ✓ | 符號擴展 |
| short → int/long/float/double/decimal | ✓ | |
| ushort → int/uint/long/ulong/float/double/decimal | ✓ | |
| int → long/float/double/decimal | ✓ | |
| uint → long/ulong/float/double/decimal | ✓ | |
| long → float/double/decimal | ✓ | 可能精度損失 |
| ulong → float/double/decimal | ✓ | 可能精度損失 |
| float → double | ✓ | |
| **有符號 ← 無符號** | ✗ | 需顯式轉換,可能數據錯誤 |
| **窄化轉換** (如 long→int) | ✗ | 需顯式轉換,可能溢出 |
int:CPU 32 位寄存器原生支持,運算最快,範圍足夠 99% 場景。long:時間戳、文件大小、ID 生成器。uint/ulong:避免符號位干擾右移。byte/short/ushort 等固定寬度類型。byte[]/short[] 節省一半內存。sbyte:CLS 不合規,公共 API 禁用。System.Numerics.BigInteger (需引用 System.Numerics.dll) 提供無上限整數,支持所有運算符重載,適用於加密、大數學、組合數計算等場景。