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

C# 整數型別範圍、溢位檢查與位元操作完整指南

     編輯:關於C#

整數型別完整對照表

型別關鍵字位元有號/無號最小值最大值
sbytesbyte8有號-128127
bytebyte8無號0255
shortshort16有號-32,76832,767
ushortushort16無號065,535
intint32有號-2,147,483,6482,147,483,647
uintuint32無號04,294,967,295
longlong64有號-9.22e189.22e18
ulongulong64無號01.84e19
nintnint平台相關有號--
nuintnuint平台相關無號--

int 內部表示與補數

// 32-bit 二進制補數
// 正數:最高位 0,其餘為數值
// 負數:對應正數按位取反 + 1
// 例:-1 = 0xFFFFFFFF (全 1)
//     -2,147,483,648 = 0x80000000 (最小值,無正數對應)

// 位元操作常用模式
int flags = 0;
flags |= 1 << 0;  // 設定 bit 0
flags &= ~(1 << 0); // 清除 bit 0
flags ^= 1 << 0;  // 切換 bit 0
bool isSet = (flags & (1 << 0)) != 0; // 檢查 bit 0

溢位行為與 checked/unchecked

// 預設 unchecked:靜態編譯期常數溢位報錯,執行期回繞
int a = int.MaxValue;
int b = a + 1; // -2147483648 (回繞)

// 區塊檢查
checked {
    int c = a + 1; // OverflowException
}

// 運算式檢查
int d = checked(a + 1);

// 編譯器選項 /checked+ 全專案啟用 (效能微降)

無號整數與互操作

  • CLS 不合規:公開 API 避免 uint/ulong,改用 long + 範圍檢查
  • 互操作 (P/Invoke、二進制協定) 必須使用對應無號型別
  • nint/nuint (C# 9+) 對應平台指標大小,適合跨平台指標運算

位元運算實用技巧

// 2 的冪次檢查
bool IsPowerOfTwo(int x) => x > 0 && (x & (x - 1)) == 0;

// 取下一個 2 的冪次
int NextPowerOfTwo(int x) {
    x--; x |= x >> 1; x |= x >> 2; x |= x >> 4; x |= x >> 8; x |= x >> 16;
    return x + 1;
}

// 計算 1 的個數 (Population Count)
int PopCount(int x) => BitOperations.PopCount((uint)x); // .NET Core 3.0+ 硬體指令

// 交換兩數 (XOR)
void Swap(ref int a, ref int b) { a ^= b; b ^= a; a ^= b; }

整數範圍表
補數示意
位元操作

本文對應《叩響 C# 之門》第 2.1.2 節 int型變量的取值範圍教學內容

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