補碼概念、補碼公式以及MATLAB求補碼方法
求負數補碼公式(x為負數二進位制數,N為位寬)
(1)
或者
X補碼 = 2^N + X (2) (X為十進位制數,得到十進位制X補碼,再將其轉換為二進位制形式)
補碼 = 2的N次方 - (負數絕對值的二進位制表示)
補碼 + 負數絕對值的二進位制表示 = 2的N次方
對於位寬為N的正數x,我們要求−x的補碼就是求正數的原碼,所以我們得到在MATLAB裡求一個位寬為N的整數x的補碼錶示的程式碼如下:
計算機中的符號數有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示“正”,用1表示“負
在計算機系統中,數值一律用補碼來表示和儲存。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬體電路。
“模”實質上是計量器產生“溢位”的量,它的值在計量器上表示不出來,計量器上只能表示出模的餘數。任何有模的計量器,均可化減法為加法運算。模固定時,減去一個數,相當於加上一個數的補數。
如鐘錶數字模為12, 8的補數是4。6-8=10,用補碼錶示為:6+4=10。結果是相同的。
在系統中減法問題也可以化成加法問題,只需把減數用相應的補數表示就可以了。把補數用到計算機數的處理上,就是補碼。
補碼的總前提是機器數,不要忘了機器數的符號位含義,最高位為0表示正數,最高位為1表示負數,而最高位是指機器字長的最左邊一位。
求一個數補碼的方法:轉化為固定位寬二進位制數,正數補碼為原數;負數補碼需對該數先取反,後加一。
補碼規則:
(1)正數補碼
正整數的補碼是其二進位制表示,與原碼相同。
【例1】+9的補碼是00001001。(備註:這個+9的補碼是用8位2進位制來表示的,補碼錶示方式很多,還有16位二進位制補碼錶示形式,以及32位二進位制補碼錶示形式,64位進位制補碼錶示形式等。每一種補碼錶示形式都只能表示有限的數字。)
(2)負數補碼
求負整數的補碼,將其對應正數二進位制表示所有位取反(包括符號位,
同一個數字在不同的補碼錶示形式中是不同的。比如-15的補碼,在8位二進位制中是11110001,然而在16位二進位制補碼錶示中,就是1111111111110001。以下都使用8位2進位制來表示。
【例2】求-5的補碼。
-5對應正數5(00000101)→所有位取反(11111010)→加1(11111011)
所以-5的補碼是11111011。
【例3】數0的補碼錶示是唯一的。
[+0]補=[+0]反=[+0]原=00000000
[ -0]補=11111111+1=00000000
(3)轉化原碼
已知一個數的補碼,求原碼的操作其實就是對該補碼再求補碼:
⑴如果補碼的符號位為“0”,表示是一個正數,其原碼就是補碼。
⑵如果補碼的符號位為“1”,表示是一個負數,那麼求給定的這個補碼的補碼就是要求的原碼。
【例4】已知一個補碼為11111001,則原碼是10000111(-7)。
因為符號位為“1”,表示是一個負數,所以該位不變,仍為“1”。
其餘七位1111001取反後為0000110;
再加1,所以是10000111。
(4)補碼的絕對值
【例5】-65的補碼是10111111
若直接將10111111轉換成十進位制,發現結果並不是-65,而是191。
事實上,在計算機內,如果是一個二進位制數,其最左邊的位是1,則我們可以判定它為負數,並且是用補碼錶示。
若要得到一個負二進位制補碼的數值,只要對補碼全部取反並加1,就可得到其數值。
如:二進位制值:10111111(-65的補碼)
各位取反:01000000
加1:01000001(+65)
(5)小數補碼
一種簡單的方式,符號位保持1不變,數值位從右邊數第一個1及其右邊的0保持不變,左邊按位取反。