無符號有符號乘法 一種二進位制乘法的計算方法

2021-10-11 15:20:15 字數 1915 閱讀 7571

一種二進位制乘法的計算方法

在十進位制中,一位數字可以表示0-9十種狀態,我們將乙個數字左移一位,然後在個位補0,會看到結果和這個數字乘以10效果相同。假如我們選取乙個數字6,將6左移一位,個位補0,結果如下:

可以證明資料左移一位,末位補0,等效於該資料乘以1位資料所能表示的資料個數。我們將1位資料所能表示的資訊量(資料個數)定義為基數,那麼可以有這樣的描述:資料左移n位空位補0,等效於該資料乘以基數的n次冪。

(題外話:能不能給出這樣的總結:所謂進製就是1位資料所能表示的資訊量呢?比如二進位制1位資料可以表示2種狀態,八進位制1位資料可以表示8種狀態,十進位制1位資料可以表示10種狀態,十六進製制1位資料可以表示16種狀態……)

同理,二進位制資料也具備同樣的性質,二進位制每位資料只能表示0或1兩種狀態,所以二進位制資料左移1位,末位補0,等效於該二進位制數乘以2。以此類推,左移2位、3位、4位等效於乘以4、8、16……

uint型資料是計算機(包括計算機、微控制器、plc等)中定義的一種無符號整數資料型別,在不同的系統中占用的位數不同,這裡我們規定,本文的uint型資料占用8位資料。

在上文的推論中我們可知,當資料的乘數正好等於基數的x次冪時(x為正整數),相當於被乘數左移x位,在空位補0。

那如果乘數不等於基數的x次冪時,又是什麼情況呢?比如二進位制數6乘以二進位制數5,常規計算過程如下:

根據數**演算法則,我們可將二進位制6*5寫成6*(4+1)=6*4+6*1,如下圖:

這樣我們將常規計算過程轉換為了簡單的移位問題,在二進位制中1等於2的0次方,4等於2的2次方,所以計算如下:

可以證明,在二進位制中任何數都可以轉換為2的某次冪+2的某次冪+……之和,比如15的二進位制表示為1111=1000+0100+0010+0001=2^3+2^2+2^1+2^0=8+4+2+1=15。

所以在程式中,只需將乘數二進位制為1的位,按照上述方法對被乘數移位,最後將所有移位結果相加即可得到無符號整數相乘的結果。

由於uint型資料的位數限制,當兩數相乘的結果大於uint能表示的最大值時,將產生溢位,得到錯誤的結果。這是我們程式中不希望出現的情況,或者出現後必須進行處理的情況。那如何判斷溢位的發生呢?

按照上文的計算方法,我們將無符號整數的乘法轉換為了移位和加法問題。移位時被移出的位將被丟掉,因此,如果被移出的位中有為1的位,我們則可認為發生了資料溢位。在進行加法運算時,當最高位相加需要進製時,我們也可以認為發生了資料溢位,因為最高位的進製也將被丟掉。

以施耐德plc為例(工野的看家飯碗),在進行移位運算時,以系統位%s17儲存本次移出的最高位,如果在執行移位過程中任何一次此位為1,我們則可認為發生了資料溢位。在進行加法運算時,以系統位%s18儲存加法運算的溢位狀態,當此位為1,則發生了資料溢位。

有符號二進位制數的乘法

最近在閱讀 深入理解計算機系統 講到補碼乘法,書上給了乙個例子是三位無符號和補碼的乘法表。其中兩個負數的例子 3位二進位制乘法結果一般需要6為二進位制表達 帶符號數 x 101 3 和y 011 3相乘 結果為110111 9 如果直接算出來十進位制是 9然後轉換為6為二進位制我也能理解,但是我很好...

有符號二進位制數的減法

本人的簡單學習過程。題目 十進位制6 12 6,利用有符號位二進位制寫出來過程。解題思路 第一步 把減12變為加負12,利用有符號二進位制表示出來 6 12 6 12 00000110 00001100 00000110 10001100 第二步 將第一步結果分別轉化成補碼 見最下補充 000001...

有符號二進位制數128位booth乘法器

目錄簡介 基4booth編碼器 4 2壓縮器 超前進製加法器 結果 總結 因為在這學期低功耗課程中老師布置的期末作業是做乙個128乘法器,但想省事兒只選擇了 調研。覺得挺可惜的,就趁著暑期時間完成這個任務。本乘法器採用基4booth編碼,輸入為兩個128位有符號數,輸出為256位有符號數。基4的bo...