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

C# 二進制基礎:位元運算、進位制轉換、補數表示與 IEEE 754 浮點數編碼

     編輯:關於C#

進位制轉換核心方法

轉換方向方法範例
二進制 → 十進制權位相加1011₂ = 1×8 + 0×4 + 1×2 + 1×1 = 11₁₀
十進制 → 二進制除 2 取餘 (整數)、乘 2 取整 (小數)13₁₀: 13/2=6..1, 6/2=3..0, 3/2=1..1, 1/2=0..1 → 1101₂
八進制/十六進制3/4 位元分組對照101101₂ = 55₈ = 2D₁₆

位元運算完整指南

運算子名稱真值表常用技巧
&AND1&1=1, 其他=0遮罩、檢查旗標、取模 2ⁿ (x & (n-1))
|OR0|0=0, 其他=1設定旗標、合併位元
^XOR相異=1, 相同=0切換旗標、交換變數、校驗和
~NOT0→1, 1→0取補數、清除旗標 (~(1<)
<<左移向高位移動、低位補 0乘 2ⁿ、建立遮罩 (1<)
>>右移有號: 算術右移 (複製符號位)
無號: 邏輯右移 (補 0)
除 2ⁿ、取高位元組

二進制補數表示 (Two's Complement)

// 8-bit 範例
// 正數:最高位 0
  5 = 0000 0101
// 負數:正數按位取反 + 1
 -5 = 1111 1010 + 1 = 1111 1011 (0xFB)

// 特殊值
-128 = 1000 0000 (最小值,無對應正數)
 127 = 0111 1111 (最大值)
  -1 = 1111 1111 (全 1)

// 優點:加減法統一、無負零、硬體簡單

IEEE 754 浮點數編碼 (單精度 float 32-bit)

┌─┬───────────┬────────────────────────────────────┐
│S│  指數 (8)  │           尾數 (23)               │
└─┴───────────┴────────────────────────────────────┘
 S: 符號位 (0=正, 1=負)
 指數: 偏移量 127 (Exponent Bias),實際指數 = 存儲值 - 127
 尾數: 隱含前導 1 (1.尾數),非正規化數隱含 0

特殊值編碼

值符號指數尾數十六進制
+0000000000000...00x00000000
-0100000000000...00x80000000
+∞011111111000...00x7F800000
-∞111111111000...00xFF800000
NaNx11111111非零0x7FC00000+

C# 位元操作實用 API


// .NET Core 3.0+ BitOperations (硬體內建)
BitOperations.PopCount((uint)x)      // 1 的個數
BitOperations.LeadingZeroCount(x)    // 前導零數
BitOperations.TrailingZeroCount(x)   // 尾隨零數
BitOperations.Log2(x)                // ⌊log₂x⌋
BitOperations.RotateLeft(x, n)       // 循環左移
BitOperations.RotateRight(x, n)      // 循環右移

// 舊版手工實作
int CountBits(uint x) {
    x -= (x >> 1) & 0x55555555;
    x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
    return (int)((x * 0x11111111) >> 24);
}

實務應用場景

  • 旗標枚舉 [Flags] enum Permission { Read=1, Write=2, Execute=4 }
  • 位元欄位壓縮儲存 (資料庫、網路封包)
  • Bloom Filter、HyperLogLog 概率資料結構
  • 圖形學:顏色通道提取 (color >> 16) & 0xFF (R)
  • 快速數學:x & 1 判斷奇偶、x >> 1 除 2

進位制轉換
補數範例
IEEE754編碼
位元運算表
浮點特殊值

本文對應《叩響 C# 之門》第 1.5 節二進制教學內容

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