天天看點

數字設計中的小數處理——在加法與乘法運算中

先提兩個問題:

【1】 數字設計中小數的處理

【2】 加法器、乘法器中輸出資料的位寬問題

1、有符号數和無符号數的定義,最高位表示符号位,其他位為資料位。無符号數則沒有符号位;

2、有符号數和無符号數轉化為10進制表示的時候唯一的差別就是最高位的權重不同,這裡的負數的表示與3中的表示不相同,這裡的每一個位都具有權值,隻不過最高位(即符号位)也是參與到權值貢獻中,且其表示的為負值;

舉例:如4bit二進制若表示有符号數,則表示範圍為:

-8 ~7

,即

1000 ~0111

,若表示為無符号數,則表示範圍為:

0~15

,即

0000 ~ 1111

3、計算機中負數的表示方法:采用補碼。即負數表示時,除去符号位之外,将資料位先進行取反碼操作(按位取反),再作補碼操作(反碼基礎上加1);

NOTE:2、3兩種表示有符号數的方式不同。

4、數的位擴充——符号位擴充

基于2中的資料表示方法,為了確定資料大小不變,對資料進行位擴充時,應該對符号位進行擴充;

2019.10.10

實際上,方式2中的方式就是以補碼的方式操作的,這時,若要計算出該補碼對應的十進制數,

有兩種方式:

一,權值法,最高位權值為負;

二、傳回原碼進行判斷(原碼至反碼的逆操作,同樣是先按位取反,然後再加一)。序号 2中采用符号位帶負權值的方法,隻是有助于人為去計算該code表達的十進制數值是多少。

5、定義:

 1、mQn是一個有符号數,最高位為符号位;

 2、mQn資料的總位寬為m;

 3、mQn資料的小數位寬為n;

則:

M位寬整數表示範圍:位寬為m的無符号整數的資料範圍為

0~2^(m)-1

位寬為m的有符号整數的資料範圍為

-2^(m-1)~2^(m-1)-1。

有符号小數表示範圍:mQn格式資料的資料範圍為

-2^(m-n-1)~ 2^(m-n-1)-1/2^n

6、兩個有符号數的和

兩個有符号數相加,為了保證和不溢出,首先應該把兩個資料進行擴充使小數點對齊,然後把擴充後的資料繼續進行一位的符号位擴充,這樣相加的結果才能保證不溢出。

  舉例:現在要把5Q2的資料5’b100.01和4Q3的資料4’b1.011相加。

Step1、由于5Q2的資料小數位隻有2位,而4Q3的資料小數點有3位,是以先把5Q2的資料5’b100.01擴位為6Q3的資料6’b100.010,使它和4Q3資料的小數點對齊

Step2、小數點對齊以後,然後把4Q3的資料4’b1.011進行符号位擴充成6Q3的資料6’b111.011

Step3、兩個6Q3的資料相加,為了保證和不溢出,和應該用7Q3的資料來存儲。是以需要先把兩個6Q3的資料進行符号位擴充成7Q3的資料,然後相加,這樣才能保證計算結果是完全正确的。

7、兩個有符号數的積

  兩個有符号數相乘,為了保證積不溢出,積的總資料位寬為兩個有符号數的總位寬之和,積的小數資料位寬為兩個有符号數的小數位寬之和。簡單來說,兩個4Q2資料相乘,要想保證積不溢出,積應該用8Q4格式來存。這是因為4Q2格式資料的範圍為:

-2~(2-1/2^2)

,那麼兩個4Q2資料相乘積的範圍為:

(-4+1/2)~4

,而8Q4格式的資料範圍為:

-8~(8-1/2^4)

,一定能準确的存放兩個4Q2格式資料的積。

  結論: mQn和aQb資料相乘,積應該用(m+a)Q(n+b)格式的資料進行存儲。

繼續閱讀