最近學習過程中發現,使用Python和Matlab等純軟件實現數字信號處理算法時根本不需要考慮數值的表示,但是使用硬件實現時,還是有必要復習下之前學過的計算機知識。

(一)整數的二進制表示
在二進制系統中,整數的表示可分為有符號數和無符號數兩種。
無符號數表示的整數范圍:0-2^N-1,例如8位無符號數可表示的范圍0~255。
有符號數,即整數不只有正整數,還有負整數,通常使用最高位來表示符號位,1:-,0:+。
(二)原碼、反碼、補碼
對於有符號數而言,在進行二進制運算時采用原碼很不方便,所以對於二進制有符號數的運算都是采用補碼實現的。
(三)加法與溢出
無符號數溢出,只需要看最高位是否有進位就可判斷是否溢出。
有符號的溢出,正+正=負,負+負=正都可表明計算結果發生了溢出。
(四)定點數和浮點數
(1)定點數:即小數位是固定的,固定的小數點位置決定了固定位數的整數部分和小數部分。

圖1 單精度定點數的表示
例:8位字長定點數,
1) 11010.110,5個整數位,3個小數位,表示-5.25;
2) 110.10110,3個整數位,5個小數位,表示-1.3125。顯然,對於固定字長的二進制數來說,整數位越大可表示的數值越大,相應的精度降低。
(2)浮點數:浮點數可提供更大的動態范圍表示,且相比定點數具有更高的分辨率。

圖2 單精度定點數的表示
浮點數的存儲格式,一般按照標准 IEEE 754。
IEEE 754 規定,浮點數的表示方法為:
最高的 1 位是符號位 s,接着的 8 位是指數E,剩下的 23 位為有效數字 M,其實也就是二進制數的科學計數法吧,通常還有個偏置bias用來表示指數的正負,對於32位單精度
浮點數,指數位8位,采用127作為bias,大於127取正,小於127取負。
例如:
5 DEC = 101 BIN = 1.01 x 2^2
9 DEC = 1001 BIN = 1.001 x 2^3
100 DEC = 01100100 BIN = 1.100100 x 2^6
0.125 DEC = 0.001 BIN = 1 x 2^-3。
浮點數到十進制數的轉換如圖:

