二補數計算機
將帶符號十進位數或二進位位元模式轉換為 4、8、16 或 32 位元二補數表示。
計算二補數
輸入帶符號十進位整數,或以 0b 開頭的二進位數。
範例:-5 或 0b11111011
關於二補數
二補數是現代電腦表示帶符號整數的標準方式。它使用固定數量的位元,並賦予最高位元負的位值權重。因此,8 位元模式可表示 -128 到 127;同樣的八個位元也能解讀為 0 到 255 的無符號數,所以交換或顯示二進位資料時,解讀方式十分重要。
正數與一般二進位數相同,只需在前方補零。手動建立負數時,先以選定寬度寫出正的絕對值,再將每個位元反相並加一。例如,十進位 5 的八位元表示為 00000101,反相得到 11111010,加一得到 11111011,也就是 -5 的八位元表示。本計算機透過以 2 的位元寬度次方為模數的運算得到相同答案。
位元寬度是數值表示的一部分。負五在四位元下為 1011,八位元下為 11111011,十六位元下為 1111111111111011。擴展帶符號負數時會重複前導的一,稱為符號擴展;擴展正數則重複前導零。若捨棄的是有效位元,縮減位元數就會改變數值,因此本計算機拒絕超出所選帶符號範圍的十進位數。
解讀位元模式時,先查看最高位元。若為零,帶符號與無符號解讀相同;若為一,則從無符號值減去 2 的位元寬度次方。因此,11111011 的無符號值為 251,而 251 - 256 得到帶符號值 -5。此規則通常比反向執行反相加一更快。
二補數具有實用的算術特性。帶符號與無符號數的加減法可使用同一個二進位加法器,溢位則依情境處理。與一補數不同,二補數的零只有一種表示。其範圍不對稱,多一個負數,因為零占用了一個非負位元模式。
本計算機適用於電腦架構、數位邏輯、嵌入式程式設計、網路協定、除錯與離散數學。選定的寬度應符合研究中的系統或資料型別。沒有位元寬度及符號屬性的位元模式資訊並不完整,採用不同慣例解讀可能得到完全不同的十進位結果。
二補數範例
| 十進位數與位元寬度 | 二進位位元模式 | 說明 |
|---|---|---|
| -5,8 位元 | 11111011 | 將 00000101 反相後加一。 |
| -8,4 位元 | 1000 | 這是四位元帶符號整數的最小值。 |
| 42,8 位元 | 00101010 | 正數使用以零補齊的一般二進位表示。 |
如何使用二補數計算機
- 輸入帶符號十進位整數,或帶有 0b 前綴的二進位位元模式。
- 選擇目標系統使用的位元寬度。
- 選擇「計算二補數」。
- 比較二進位、帶符號十進位及無符號十進位的解讀。
二補數常見問題
為什麼位元寬度很重要?
寬度決定模數與帶符號數範圍。同一數值需要不同的補位方式,在較小寬度下可能無法表示。
八位元能表示什麼範圍?
八位元二補數整數範圍是 -128 到 127,其位元模式的無符號範圍為 0 到 255。
如何將二進位數取負?
在固定寬度內,將每個位元反相後加一。除了最小可表示整數這個特殊情況外,再執行一次會回到原值。
為什麼帶符號與無符號結果不同?
兩者賦予最高位元不同的位值意義。儲存的位元相同,但解讀方式不同。
二補數有負零嗎?
沒有。零只有全零這一種表示,這是相較於符號大小表示法和一補數的重要優點。