定點數乘法


原碼乘法:

  原碼的手動乘法:就和小學學過的豎式乘法寫法一致,從右到左,乘數每一位分別與被乘數相乘。

          1011

      x  1101

-------------------

         1011

       0000

     1011

   1011

----------------

 10001111

原碼的一位乘法:

原理:從傳統豎式乘法里面可以看到,每次乘數只有一位與被乘數相乘。如果用乘數的最低位和被乘數相乘,再把它右移一位,就可以作為部分積,和下一位相乘后的結果相加。

 

具體計算:

  符號位最后單獨處理,絕對值參加乘法運算。該算法因為每次根據乘出的一位來計算位積,所以稱為原碼一位乘法。

步驟:初始部分積為0,Yi為1;若Yi為0,部分積加|X|,累加結果右移一位,得到新部分積;(i依次為n n-1 n-2....)

符號位異或運算。

為什么要右移:對於乘數,最后一位已經用過了,沒有價值,所以直接右移丟棄掉,剩下的空間剛好用來存儲部分積右移的部分。換句話說,部分積可以視為在乘數左側,每次右移擠占乘數空間

例題:

  以+1011  *   -1101為例做一位乘法

  初始的部分積為0,0000,0表示正數,不參與計算。部分積實際為0000.                數據顯示:0000 1101

  1)用乘數1101的最后一位1乘1011 並加上之前的部分積0000,結果為1011,

部分積右移一位,擠占乘數1101的位置,乘數變成了1110,部分積變成0101           數據顯示: 0101 1110

 

   2)用乘數1110的最后一位0乘1011,並加上部分積,結果為0101        數據顯示: 0101 1110

部分積右移,擠占乘數,乘數變成1111,部分積變成0010              數據顯示: 0010 1111

 

  3)用乘數1111的新最后一位1乘1011,並加上部分積,結果為1101          數據顯示: 1101 1111

部分積右移,擠占乘數,乘數變成1111,部分積變成0110              數據顯示: 0110 1111

 

   4)用乘數1111的新最后一位1乘1011,並加上部分積,結果為0001      數據顯示: 0110 1111

部分積右移,擠占乘數,乘數變成1111,部分積為1000            數據顯示:1000 1111

 

 

與乘數1111拼接

最終結果為1,1000 1111                前面的1表示負數

-------------

補碼一位乘法

在計算機中用補碼運算較為方便。補碼乘法運算時,可以將補碼的數值部分同原碼一樣直接做乘法,在根據乘數符號位做修正即可。

在修正X*Y時,Y的符號位為0不用修正,Y的符號位為1 時減去X

此外,補碼的符號位可以直接參加運算,不用單獨處理;並且他們需要兩位符號位

舉例:

X為+0.1011  Y為-0.1101

轉化為補碼后,X為00.1011  Y為11.0011

計算大致同上述步驟。由於Y的符號位為11,因此計算結果00.0010 0001要減去X補碼,也就是加上-X補碼

實際結果為1.0111 0001

轉化為原碼是-0.1000 1111

轉換為原碼的話為-0.1000 1111


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM