一的補數計算機
反相二進位數的每個位元,或由十進位整數計算固定位元寬度的一的補數。
計算一的補數
選擇二進位或十進位輸入,再將每個位元的零變為一、一變為零。
關於一的補數
二進位數的一的補數是將每個位元反相得到的:零變成一,一變成零。此操作也稱為位元反相或邏輯非。雖然手算很簡單,卻廣泛用於電腦架構、數位電子、網路協定與有號二進位算術的學習。本計算機保留二進位輸入長度,讓前導零及預期的暫存器寬度在答案中清楚呈現。
將十進位整數轉換後再反相時,位元寬度非常重要。十進位值 42 最短的二進位形式為 101010,但八位元暫存器會將它儲存為 00101010。反相全部八個位元後得到 11010101,解讀為無號數時為 213。不同寬度會產生不同位元模式,因為新增的前導零會變成前導一。因此,選擇十進位模式時,本工具要求設定 1 到 32 的位元寬度,並拒絕無法以該數量無號位元容納的數值。
早期電腦也曾使用一的補數表示有號數。正數使用一般二進位,負數則由對應正數的位元逐一反相而成。這種系統有兩種零:全零表示正零,全一表示負零。現代處理器多改用二的補數,因為它只有一種零,且能簡化算術電路。不過,一的補數運算在網際網路檢查碼中仍相當重要:將各字組以循環進位相加,最後再將總和反相。
請勿混淆一的補數與二的補數。二的補數是在固定位元寬度內,將一的補數加一而得。此差異會改變所表示的負值,在低階軟體除錯時尤其重要。本計算機僅執行直接的位元反相,顯示所得位元序列,以及將它視為無號數的十進位值。適合核對作業、設計位元遮罩、學習邏輯閘及確認固定位元寬度轉換,不必逐一手動檢查。
二進位輸入請填入要反相的完整序列。十進位輸入則選擇足以容納原數的位元數。結果面板會顯示補零後的來源位元、反相序列與無號十進位值,方便立即核對每個階段。
一的補數範例
| 輸入 | 輸出 | 說明 |
|---|---|---|
| 二進位 1010 | 0101 | 四個位元皆反相。 |
| 二進位 00001111 | 11110000 | 前導零的位置保留,並變成一。 |
| 十進位 42,8 位元 | 11010101 (213) | 42 在反相前先補零為 00101010。 |
如何計算一的補數
- 已有位元序列時選擇「二進位輸入」,需要轉換時選擇「十進位輸入」。
- 輸入二進位序列或非負十進位整數。
- 十進位輸入請選擇足以容納該數值的位元寬度。
- 點選「計算一的補數」,查看補零輸入、反相位元與十進位結果。
一的補數常見問題
如何求二進位數的一的補數?
將每個零換成一,每個一換成零。保持位元數不變,以保留原始寬度。
為什麼位元寬度會改變十進位模式的結果?
前導零是固定位元寬度二進位表示的一部分,反相後會變成一。因此,相同十進位值的八位元反相結果與十六位元反相結果不同。
一的補數和二的補數相同嗎?
不同。二的補數是在所選寬度內,將一的補數位元模式加一;一的補數則只反相位元。
一的補數運算中的負零是什麼?
在早期有號一的補數系統中,全一位元模式表示負零,全零表示正零。這也是多數電腦改用二的補數的原因之一。
一的補數運算仍用在哪裡?
它用於 IPv4、TCP 與 UDP 等協定的檢查碼。計算時以循環進位將固定位元寬度的字組相加,再反相最終總和。