🔄 二補數
🔄 二進制中表示有符號數
二補數是計算機中最常用的方法,用於以二進制形式表示有符號整數(包括正數和負數)。這種表示方法簡化了算術運算,並消除了對單獨的加法和減法電路的需求。
🤔 為什麼使用二補數?
在理解二補數之前,了解為什麼需要它很有幫助:
- 二進制數自然表示無符號(正)值
- 計算機需要表示正數和負數
- 二補數提供了一個優雅的解決方案,簡化了算術運算
- 加法和減法可以使用相同的硬件電路
⚙️ 二補數如何工作
在n位二補數系統中:
- 正數以常規二進制形式表示,最左位(MSB)為0
- 負數表示方法為:
- 取絕對值的二進制表示
- 反轉所有位(將0變為1,將1變為0)
- 結果加1
最左位作為符號位:
- 0表示正數
- 1表示負數
📏 值的範圍
在n位二補數表示中:
- 最小值:-2^(n-1)
- 最大值:2^(n-1) - 1
例如,對於8位:
- 範圍是-128到127
- 最小值:-128(10000000)
- 最大值:127(01111111)
🔄 十進制轉換為二補數
對於正數 ➕
只需像往常一樣轉換為二進制,確保最左位為0。
對於負數 ➖
- 將絕對值轉換為二進制
- 反轉所有位(一補數)
- 結果加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
- 轉換為十進制
- 應用負號
例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):
- 將B轉換為其二補數表示(有效為-B)
- 加A和-B
例:從5中減去3(5 - 3)
5的二進制: 00000101
3的二進制: 00000011
轉換為-3: 11111101
--------
5 + (-3) = 00000010(十進制的2)
🔍 特殊情況和性質
0️⃣ 零的表示
零表示為所有位設為0:00000000
❓ 負零?
在二補數中,沒有單獨的負零表示。邏輯上應該是-0的位模式用於表示最小的負數。
📉 最小負數
最小負數(例如,8位中的-128)有一個特殊性質:取其二補數由於溢出而得到相同的數。
💪 二補數的優點
- 🧮 簡化算術:相同的硬件可以執行加法和減法
- 0️⃣ 無冗餘零:零只有一種表示
- ⚠️ 自然溢出行為:容易檢測溢出條件
- ⚡ 高效實現:在數碼電路中易於實現
理解二補數對於低級編程、計算機架構以及涉及二進制算術和數據表示的任何領域都至關重要。