先提兩個問題:
【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)格式的資料進行存儲。