X的補碼為0.1010,-X的補碼為1.0110,Y的補碼為1.1001(低位有4位)。
高位 低位(乘數補碼處理值) 說明
00 0000 |110010 最低位10,高位加-X的補碼
11 0110
————
11 1011 01|1001 執行右移,最低位01,高位加X的補碼
00 1010
00 0101
00 0010 10|1100 執行右移,最低位00,高位加0
00 0000
00 0010
00 0001 010|110 執行右移,最低位10,高位加-X的補碼
11 0111
11 1011 1010|11 執行右移,乘數補碼被右移出去,進行最後一次
00 0000 運算,最低位11,高位加0
11 1011 1010|11
最終結果為11.10111010,因為補碼一位乘結果用的是雙符號位,換成單符號位就是1.10111010。
我總結了點補碼一位乘的方法,給你參考下
處理物件:被乘數補碼*乘數補碼=兩數積的補碼。
預處理: 1、單獨算出被乘數的相反數的補碼,同時乘數補碼往右擴一位補0(乘數補碼處
理值),積的符號位與其餘位必須一同計算。
2、兩數補碼相乘拆分為多個加法運算。
3、每次加法運算分為高位和低位兩部分處理,高位初始值為0、位數是在帶符號被乘
數位數基礎上向左擴一位(利於右移),低位初始值是乘數補碼處理值、位數與乘數
資料位位數相同。
第一次加:4、第一次加法是由高位和加數相加,加數的值由乘數補碼處理值的最低兩位確定
(若為01,加數為被乘數補碼,若為10,加數為被乘數的相反數的補碼,若這兩位
的數值相等,則加數為0;加數左邊多餘的一位根據其符號位確定補0還是補1,符
號位為0則補0,符號位為1則補1)。
5、此次加法運算結束後,加法運算所得的高位(部分積)與低位合成一個整體並右移1
位得到新的高位和低位(右移時左邊補0還是補1由右移前的符號位確定,符號位為
0則補0,符號位為1則補1,,另外在右移時乘數補碼處理值也連帶著右移)。
第二次加:6、高位再次進行加法處理,加數的值由新得到的乘數補碼處理值的最低兩位確定(確
定方法同第4點)。
7、此次加法運算結束後,加法運算所得的高位(部分積)與低位合成一個整體並右移1
位得到新的高位和低位(右移時高位左邊補0或1的確定方法同第5點,另外在右移
時乘數補碼處理值也連帶著右移)。
迴圈加法:8、按“第二次加”的方法迴圈,直至低位將乘數補碼處理值的每一位都右移出去後,
再進行一次加法運算(此次加法運算結束後不進行右移),此時得到的高位和低位
合成一個整體就是最終乘積,這個最終乘積是雙符號位。
9、所得的最終乘積的小數位數必須是被乘 數補碼與乘數補碼的小數位數之和。
關於雙符號位:00 正,11 負,01 上溢,10 下溢。
附註:無論是原碼一位乘,還是補碼一位乘、補碼二位乘,與手工演算法都有共通之處,都是根據
乘數每一位(或兩位) 的狀態在被乘數的基礎上來確定加數(如被乘數、被乘數補碼、被
乘數相反數補碼、0),因為乘數是二進位制的, 每一位只有0、1兩種狀態,所以又免去
了手算十進位制乘法中以乘數每一位去乘被乘數來確定加數的過程,而右 移所得的部分
積就相當於手算乘法中左移加數。
X的補碼為0.1010,-X的補碼為1.0110,Y的補碼為1.1001(低位有4位)。
高位 低位(乘數補碼處理值) 說明
00 0000 |110010 最低位10,高位加-X的補碼
11 0110
————
11 0110
11 1011 01|1001 執行右移,最低位01,高位加X的補碼
00 1010
————
00 0101
00 0010 10|1100 執行右移,最低位00,高位加0
00 0000
————
00 0010
00 0001 010|110 執行右移,最低位10,高位加-X的補碼
11 0110
————
11 0111
11 1011 1010|11 執行右移,乘數補碼被右移出去,進行最後一次
00 0000 運算,最低位11,高位加0
————
11 1011 1010|11
最終結果為11.10111010,因為補碼一位乘結果用的是雙符號位,換成單符號位就是1.10111010。
我總結了點補碼一位乘的方法,給你參考下
處理物件:被乘數補碼*乘數補碼=兩數積的補碼。
預處理: 1、單獨算出被乘數的相反數的補碼,同時乘數補碼往右擴一位補0(乘數補碼處
理值),積的符號位與其餘位必須一同計算。
2、兩數補碼相乘拆分為多個加法運算。
3、每次加法運算分為高位和低位兩部分處理,高位初始值為0、位數是在帶符號被乘
數位數基礎上向左擴一位(利於右移),低位初始值是乘數補碼處理值、位數與乘數
資料位位數相同。
第一次加:4、第一次加法是由高位和加數相加,加數的值由乘數補碼處理值的最低兩位確定
(若為01,加數為被乘數補碼,若為10,加數為被乘數的相反數的補碼,若這兩位
的數值相等,則加數為0;加數左邊多餘的一位根據其符號位確定補0還是補1,符
號位為0則補0,符號位為1則補1)。
5、此次加法運算結束後,加法運算所得的高位(部分積)與低位合成一個整體並右移1
位得到新的高位和低位(右移時左邊補0還是補1由右移前的符號位確定,符號位為
0則補0,符號位為1則補1,,另外在右移時乘數補碼處理值也連帶著右移)。
第二次加:6、高位再次進行加法處理,加數的值由新得到的乘數補碼處理值的最低兩位確定(確
定方法同第4點)。
7、此次加法運算結束後,加法運算所得的高位(部分積)與低位合成一個整體並右移1
位得到新的高位和低位(右移時高位左邊補0或1的確定方法同第5點,另外在右移
時乘數補碼處理值也連帶著右移)。
迴圈加法:8、按“第二次加”的方法迴圈,直至低位將乘數補碼處理值的每一位都右移出去後,
再進行一次加法運算(此次加法運算結束後不進行右移),此時得到的高位和低位
合成一個整體就是最終乘積,這個最終乘積是雙符號位。
9、所得的最終乘積的小數位數必須是被乘 數補碼與乘數補碼的小數位數之和。
關於雙符號位:00 正,11 負,01 上溢,10 下溢。
附註:無論是原碼一位乘,還是補碼一位乘、補碼二位乘,與手工演算法都有共通之處,都是根據
乘數每一位(或兩位) 的狀態在被乘數的基礎上來確定加數(如被乘數、被乘數補碼、被
乘數相反數補碼、0),因為乘數是二進位制的, 每一位只有0、1兩種狀態,所以又免去
了手算十進位制乘法中以乘數每一位去乘被乘數來確定加數的過程,而右 移所得的部分
積就相當於手算乘法中左移加數。