一補碼
二進位制數系統是數字系統中最流行的數製表示技術之一。在二進位制系統中,只有兩個符號或可能的數字值,即 0(關)和 1(開)。由任何只有兩種工作狀態或可能條件的裝置表示。
通常,二進位制數有兩種補碼:1's 補碼和2's 補碼。要獲得二進位制數的 1's 補碼,只需反轉給定的數字。例如,二進位制數 110010 的 1's 補碼是 001101。要獲得二進位制數的 2's 補碼,是給定數字的 1's 補碼加上最低有效位 (LSB) 的 1。例如,二進位制數 10010 的 2's 補碼是 (01101) + 1 = 01110。
二進位制數的 1's 補碼
將二進位制數轉換為 1's 補碼有一個簡單的演算法。要獲得二進位制數的 1's 補碼,只需反轉給定的數字。您可以簡單地使用僅一個非門對二進位制數輸入的每一位實現邏輯電路。如下所示給出了 4 位 1's 補碼的邏輯電路實現。

示例 1:求二進位制數 10101110 的 1's 補碼。
只需反轉給定二進位制數的每一位,因此給定數字的 1's 補碼將是 01010001。
示例 2:求二進位制數 10001.001 的 1's 補碼。
只需反轉給定二進位制數的每一位,因此給定數字的 1's 補碼將是 01110.110。
示例 3:求每個 3 位二進位制數的 1's 補碼。
只需反轉給定二進位制數的每一位,因此每個 3 位二進位制數的 1's 補碼將是:
| 二進位制數 | 1's 補碼 |
|---|---|
| 000 | 111 |
| 001 | 110 |
| 010 | 101 |
| 011 | 100 |
| 100 | 011 |
| 101 | 010 |
| 110 | 001 |
| 111 | 000 |
1's 補碼二進位制數的用途
1's 補碼二進位制數有各種用途,主要用於有符號二進位制數表示和二進位制數的各種算術運算,例如加法、減法等。
有符號二進位制數表示中的 1's 補碼
1's 補碼二進位制數在有符號數表示中非常有用。正數簡單地表示為二進位制數。正二進位制數不需要做任何處理。但在負二進位制數表示的情況下,我們用 1's 補碼錶示。如果數字為負數,則使用 1's 補碼錶示。首先用正號表示數字,然後取該數字的 1's 補碼。
示例:假設我們使用 5 位暫存器。-5 和 +5 的表示如下

+5 按符號幅度法表示。-5 使用以下步驟表示
(i) +5 = 0 0101
(ii) 取 0 0101 的 1's 補碼,即 1 1010。MSB 為 1,表示數字為負數。
負數的 MSB 始終為 1。
數字範圍:對於 k 位暫存器,可以儲存的最大正數是 ( 2 (k-1) -1),可以儲存的最小負數是 -( 2 (k-1) -1)。
注意該系統的一個缺點是 0 有兩種不同的表示,一種是 -0(例如,在 5 位暫存器中為 1 1111),另一種是 +0(例如,在 5 位暫存器中為 0 0000)。

讓我們看看算術運算:1's 補碼二進位制數中的減法和加法。
1's 補碼減法
使用 1's 補碼減去兩個二進位制數的演算法解釋如下
- 取被減數的 1's 補碼
- 與被減數相加
- 如果上述加法的結果有進位 1,則將其加到給定結果的最低有效位 (LSB)
- 如果沒有進位 1,則取結果的 1's 補碼,這將為負數
請注意,被減數是從另一個數(即被減數)中減去的數。
示例(情況 1:當進位為 1 時):計算 10101 - 00101
根據上述演算法,取被減數 00101 的 1's 補碼,即 11010,然後將這兩者相加。所以,10101 + 11010 =1 01111 。由於有進位 1,所以將其加到給定結果的 LSB,即 01111+1=10000,這就是答案。
示例(情況 2:當沒有進位時):計算 11110 與 1110 的差
根據上述演算法,取被減數 11110 的 1's 補碼,即 00011。然後將這兩者相加,所以, 11001 + 00011 =11100 。由於沒有進位 1,所以取上述結果的 1's 補碼,即 00011,這是一個負數,即 00011,這就是答案。
類似地,您可以減去兩個混合(帶小數部分)的二進位制數。請注意,每當您獲得進位 1 時,您始終將進位加到結果的最低有效位 (LSB)。混合或小數二進位制數的 LSB 是混合或小數二進位制數的最後(最右邊)一位。
1's 補碼加法
使用 1's 補碼對兩個二進位制數進行加法有不同的情況。這些解釋如下。
情況 1:當正數的幅度較大時,正數和負數的加法:
當正數的幅度較大時,只需取負數的 1's 補碼,並將和的迴圈進位加到最低有效位 (LSB)。
示例:加 1110 和 -1101。
所以,取 1101 的 1's 補碼,即 0010,然後與給定數字相加。所以, 1110+0010=1 0000 ,然後將此進位加到 LSB,0000+1=0001 ,這就是答案。
請注意,如果暫存器大小較大,則填充相同的 MSB 值以保留輸入和輸出的符號幅度。
情況 2:當負數的幅度較大時,正數和負數的加法:
當負數的幅度較大時,取負數的 1's 補碼並與給定的正數相加。由於不會有任何迴圈進位,因此取結果的 1's 補碼,該結果將為負數。
示例:在五位暫存器中加 1010 和 -1100。
請注意,有五位暫存器,因此這些新數字將是 01010 和 -01100。
現在取 01100 的 1's 補碼,即 10011,並加 01010+10011=11101 。然後取此結果的 1's 補碼,即 00010,這將是一個負數,即 -00010,這就是答案。
情況 3:兩個負數的加法
您需要對這兩個數字都取 1's 補碼,然後將這些 1's 補碼的數字相加。由於始終存在迴圈進位,因此將其再次加到結果的 MSB。現在,也取先前結果的 1's 補碼,因此這將是一個負數。
或者,您可以直接新增兩個負數,並獲得此結果,該結果將僅為負數。
示例:在五位暫存器中加 -1010 和 -0101。
這五個位數是 -01010 和 -00101。將這些數字的補碼相加,10101+11010 =1 01111 。由於有進位 1,所以將其加到結果的 LSB,即 01111+1=10000 。現在取此結果的 1's 補碼,即 01111,此數字為負數,即 -01111,這就是答案。
請注意,迴圈進位加法僅發生在 1's 補碼算術運算中,而不發生在 2's 補碼算術運算中。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP