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

C# 整數類型全解析:9 種類型、取值範圍與溢出行為

     編輯:關於C語言

從 sbyte 到 ulong:精準選擇整數類型,避免溢出 Bug

C# 提供 9 種整數類型 (含 char 共 10 種),按**有無符號**與**位寬**劃分。理解每種類型的取值範圍、內存佔用、隱式/顯式轉換規則,是寫出健壯數值代碼的基礎。

九大整數類型對照表

關鍵字.NET 類型有符號位寬最小值最大值
sbyteSystem.SByte是8-128127
byteSystem.Byte否80255
shortSystem.Int16是16-32,76832,767
ushortSystem.UInt16否16065,535
intSystem.Int32是32-2,147,483,6482,147,483,647
uintSystem.UInt32否3204,294,967,295
longSystem.Int64是64-9,223,372,036,854,775,8089,223,372,036,854,775,807
ulongSystem.UInt64否64018,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)✗需顯式轉換,可能溢出

選型建議

  1. 默認用 int:CPU 32 位寄存器原生支持,運算最快,範圍足夠 99% 場景。
  2. 需 > 21 億用 long:時間戳、文件大小、ID 生成器。
  3. 位運算/標誌位用 uint/ulong:避免符號位干擾右移。
  4. 互操作/網絡協議/硬件寄存器:按規範選 byte/short/ushort 等固定寬度類型。
  5. 極度內存敏感 (大數組):byte[]/short[] 節省一半內存。
  6. 避免 sbyte:CLS 不合規,公共 API 禁用。

補充:BigInteger 處理任意大整數

System.Numerics.BigInteger (需引用 System.Numerics.dll) 提供無上限整數,支持所有運算符重載,適用於加密、大數學、組合數計算等場景。

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