補碼一位乘
回顧原碼的一位乘:原碼一位乘是數值位之間的計算,計算之前需要對被乘數取絕對值,符號位單獨處理;而補碼乘法的符號位是計算過程中產生的,因此不需要對被乘數取絕對值。
被乘數和部分積均取2位符號位,因此乘數和被乘數均要在最高位擴位。補碼擴位原則:正數補0,負數補1.
乘數取一位附加位,作為乘數的最後一位,在移動時作為最低位處理,初始化值為0。
每次都對乘數末兩位(包括附加位)判斷,數值為00和11時進行右移1位操作,數值為01時部分積+[被乘數]補後進行移位,數值為10時部分積-[被乘數]補後進行移位。
移位次數與乘數數值位的位數有關,但最後一次移位完成後還需要進行步驟3,但不移位。
注意事項:
高位補位時,負數高位補1,正數高位補0。
符號位也參與運算
移位原則採取補碼算數移位(正數補零,負數右移補1,左移補0)
例題:[x]補=1.0101,[y]補=1.0011,求[x*y]補。
解:① 初始化部分積為00.0000,y補位後為10011, 附加位c=0,[-x]補=00.1011
② 判斷數10,進行部分積-[x]補,即00.0000+00.1011=00.1011,乘數移一位,高位補部分積的最低位,乘數原來的最低位往附加位移,第一次移位後:乘數 11001,c=1,部分積00.0101
③ 判斷數11,直接進行移位。第二次移位後:乘數11100,c=1,部分積00.0010
④ 判斷數01,進行部分積+[x]補。即00.0010+11.0101=11.0111,第三次移位後,乘數11110,c=0, 部分積11.1011。
⑤ 判斷數00,直接進行移位。第四次移位(乘數的尾數字數次)後,乘數11111,c=0,部分積11.1101。
⑥ 判斷數10,進行部分積-[x]補,即11.1101+00.1011=00.1000,此時不再進行移位了。
⑦ 形成結果,從部分積開始取小數點後8位,即00.10001111。
補碼二位乘
補碼二位乘與原碼二位乘相似,部分積和被乘數採用三位符號位,補碼的二位乘中乘數採用兩位符號位,在末尾再加一位附加位。
原理:部分積和被乘數採用3位符號位,高位擴位。乘數高位用兩位符號位+尾數,末尾加一位附加位,初始值為0
對乘數的末三位判斷,情況如下:
000:直接移兩位
001:部分積+被乘數的補碼後移動兩位
010:部分積+被乘數的補碼後移動兩位
011:部分積+2被乘數的補碼(也就是被乘數左移一位的結果)後移動兩位
100:部分積-2被乘數的補碼(也就是被乘數左移一位的結果)後移動兩位
101:部分積-被乘數的補碼後移動兩位
110:部分積-被乘數的補碼後移動兩位
111:直接移兩位
乘數的尾數分奇數偶數兩種情況:偶數時採取兩位符號位,奇數時採取一位符號位。偶數情況下:移位次數為尾數字數/2,最後一步仍然要對末三位判斷,但是不移位;奇數情況下移位次數為尾數字數/2+1次,最後一步也要對末三位判斷,然後移動一位(注意)。
直接上題
[x]補=0.0101,[y]補=1.0101,求[xy]補
解:① 規格化被乘數和部分積,取三位符號位,[x]補=000.0101,最好算一下2[x]補=000.1010,部分積000.0000;乘數尾數字位數為偶數,取兩位符號位,附加末尾位取0,得1101010
② 判斷值為010,進行部分積+[x]補,000.0000+000.0101=000.0101,第一次移位後:乘數0111010,部分積000.0001
③ 判斷值為010,進行部分積+[x]補,000.0001+000.0101=000.0110,第二次移位後,乘數1001110,
部分積000.0001
④ 最後一次判斷但是不移位,判斷值為110,此時進行部分積-[x]補,000.0001+111.1011=111.1100
開始取結果,從部分積開始取,連著最終乘數直到小數字達到被乘數的尾數字+乘數尾數字,即111.11001001,完。
定點原碼 補碼一位乘
移位操作對於任何計算機來說都是不可缺少的操作,各種計算機指令系統中都含有移位指令。這裡首先給大家介紹一下移位操作中的算術移位 原碼右移 補碼右移 算術原碼右移 符號位不變,各位右移,最高有效位補0,末位移出。列如 1.1001 右移 1.0100 0.1101 右移 0.0110 算術補碼右移 符號...
定點小數補碼一位乘(校正法)
程式 定點小數補碼一位乘 校正法 define crt secure no warnings include include include using namespace std const int n 4 數值位位數 a,b聯合右移 算術移位 void rightmove bitset a,bi...
高精乘 一位乘多位
比較簡單的高精乘,為多位乘多位做鋪墊 題目描述 傳說古代印度有個喜歡下棋的國王叫舍罕,而宰相達依爾是個聰明的大臣,發明了西洋棋。國王玩得愛不惜手,決定獎賞宰相。達依爾說 陛下,我別無他求,請你在這張棋盤的第乙個格仔裡賞我一粒麥子 在第 個格仔裡賞我2粒麥子 在第 個格仔裡賞我 粒麥子 在第 個格仔裡...