跳到主要內容

🔄 二補數

🔄 二進制中表示有符號數

二補數是計算機中最常用的方法,用於以二進制形式表示有符號整數(包括正數和負數)。這種表示方法簡化了算術運算,並消除了對單獨的加法和減法電路的需求。

🤔 為什麼使用二補數?

在理解二補數之前,了解為什麼需要它很有幫助:

  • 二進制數自然表示無符號(正)值
  • 計算機需要表示正數和負數
  • 二補數提供了一個優雅的解決方案,簡化了算術運算
  • 加法和減法可以使用相同的硬件電路

⚙️ 二補數如何工作

在n位二補數系統中:

  • 正數以常規二進制形式表示,最左位(MSB)為0
  • 負數表示方法為:
    1. 取絕對值的二進制表示
    2. 反轉所有位(將0變為1,將1變為0)
    3. 結果加1

最左位作為符號位:

  • 0表示正數
  • 1表示負數

📏 值的範圍

在n位二補數表示中:

  • 最小值:-2^(n-1)
  • 最大值:2^(n-1) - 1

例如,對於8位:

  • 範圍是-128到127
  • 最小值:-128(10000000)
  • 最大值:127(01111111)

🔄 十進制轉換為二補數

對於正數 ➕

只需像往常一樣轉換為二進制,確保最左位為0。

對於負數 ➖

  1. 將絕對值轉換為二進制
  2. 反轉所有位(一補數)
  3. 結果加1(二補數)

例1:將-5轉換為8位二補數

步驟1:將5轉換為二進制
00000101

步驟2:反轉所有位(一補數)
11111010

步驟3:加1
11111010
+ 00000001
--------
11111011

所以-5在8位二補數中是11111011。

例2:將-42轉換為8位二補數

步驟1:將42轉換為二進制
00101010

步驟2:反轉所有位(一補數)
11010101

步驟3:加1
11010101
+ 00000001
--------
11010110

所以-42在8位二補數中是11010110。

🔄 二補數轉換為十進制

對於正數(MSB = 0)➕

像往常一樣從二進制轉換為十進制。

對於負數(MSB = 1)➖

  1. 反轉所有位
  2. 加1
  3. 轉換為十進制
  4. 應用負號

例1:將11111011轉換為十進制

步驟1:MSB為1,所以是負數
11111011

步驟2:反轉所有位
00000100

步驟3:加1
00000100
+ 00000001
--------
00000101

步驟4:轉換為十進制
00000101 = 5

步驟5:應用負號
-5

所以11111011在二補數中表示-5。

🧮 二補數的算術運算

➕ 加法

像往常一樣加二進制數,忽略超出可用位的任何進位。

例:加5和-3

5的二進制:           00000101
-3的二補數: 11111101
--------
00000010(十進制的2)

➖ 減法

要從A中減去B(A - B):

  1. 將B轉換為其二補數表示(有效為-B)
  2. 加A和-B

例:從5中減去3(5 - 3)

5的二進制:           00000101
3的二進制: 00000011
轉換為-3: 11111101
--------
5 + (-3) = 00000010(十進制的2)

🔍 特殊情況和性質

0️⃣ 零的表示

零表示為所有位設為0:00000000

❓ 負零?

在二補數中,沒有單獨的負零表示。邏輯上應該是-0的位模式用於表示最小的負數。

📉 最小負數

最小負數(例如,8位中的-128)有一個特殊性質:取其二補數由於溢出而得到相同的數。

💪 二補數的優點

  1. 🧮 簡化算術:相同的硬件可以執行加法和減法
  2. 0️⃣ 無冗餘零:零只有一種表示
  3. ⚠️ 自然溢出行為:容易檢測溢出條件
  4. 高效實現:在數碼電路中易於實現

理解二補數對於低級編程、計算機架構以及涉及二進制算術和數據表示的任何領域都至關重要。