計算機實現32位整數加減乘除的方法


計算機實現32位整數加減乘除的方法

前言

1)原碼、反碼、補碼
1.正數的原碼、反碼、補碼都相同
2.負數的反碼是保留原碼符號位,其他位取反;負數的補碼是反碼+1
3.正數與負數相加,二進制結果符號位為1,此時是結果的補碼,需要-1得出結果反碼,再保留符號位取反得出結果
2)乘法原理
1.忽略兩個乘數的符號位
2.將第一個乘數分解為2階泰勒展開式
3.將第二個乘數在展開式的系數為1時的指數向左移位
4.將所有移位的值相加,得出乘積的無符號值
5.對兩個乘數的符號位進行異或運算,得出符號位
6.將符號位和無符號乘積合並,得出實際乘積
3)除法原理
1.忽略被除數和除數的符號位
2.從左向右,在被除數中找到第一個1的位置,與除數相比較,若小於除數,則結果為0,余數為1,若大於除數,則商為1,余數為該步被減數減去除數的差值,新的被減數為本次余數后拼接新的被除數位
3.當被除數最后一位運算完畢,將從上向下的各步結果從左向右拼接,就是最終的無符號商,最后一步的余數,是最終的無符號余數
4.對被除數和除數的符號位進行異或運算,得出符號位
5.將符號位和無符號結果、無符號余數進行合並,得出實際到店商和余數

一、加法

1)正常加法
計算:13+18=31
13
0000 0000 0000 0000 0000 0000 0000 0000 1101
18
0000 0000 0000 0000 0000 0000 0000 0001 0010
31
0000 0000 0000 0000 0000 0000 0000 0001 1111
2)結果溢出加法
計算:2^31-1+2^31-1=2^32-2 <> -2^31-2
2^31-1
0111 1111 1111 1111 1111 1111 1111 1111 1111
2^31-1
0111 1111 1111 1111 1111 1111 1111 1111 1111
-2^31-2
1111 1111 1111 1111 1111 1111 1111 1111 1110

二、減法

1)被減數>減數
計算:18-13=5
18
0000 0000 0000 0000 0000 0000 0000 0001 0010
-13 原碼
1000 0000 0000 0000 0000 0000 0000 0000 1101
-13 反碼
1111 1111 1111 1111 1111 1111 1111 1111 0010
-13 補碼
1111 1111 1111 1111 1111 1111 1111 1111 0011
5
0000 0000 0000 0000 0000 0000 0000 0000 0101
2)被減數<減數
計算:13-18=-5
13
0000 0000 0000 0000 0000 0000 0000 0000 1101
-18 原碼
1000 0000 0000 0000 0000 0000 0000 0001 0010
-18 反碼
1111 1111 1111 1111 1111 1111 1111 1110 1101
-18 補碼
1111 1111 1111 1111 1111 1111 1111 1110 1110
-5 補碼
1111 1111 1111 1111 1111 1111 1111 1111 1011
-5 反碼
1111 1111 1111 1111 1111 1111 1111 1111 1010
-5 原碼
1000 0000 0000 0000 0000 0000 0000 0001 0101
3)[0,2^31-1]-最小值
計算:0-2^31=-2^31 <> 0
0
0000 0000 0000 0000 0000 0000 0000 0000 0000
-2^31 原碼
1000 0000 0000 0000 0000 0000 0000 0000 0000
-2^31 反碼
1111 1111 1111 1111 1111 1111 1111 1111 1111
-2^31 補碼
0000 0000 0000 0000 0000 0000 0000 0000 0000

0000 0000 0000 0000 0000 0000 0000 0000 0000

三、乘法

1)正數相乘
計算:13*18=234
13
0000 0000 0000 0000 0000 0000 0000 0000 1101
18
0000 0000 0000 0000 0000 0000 0000 0001 0010
step1:
13=0*2^30 + 0*2^29 +...+ 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0
step2:
0000 0000 0000 0000 0000 0000 0000 0001 0010
+
0000 0000 0000 0000 0000 0000 0000 0100 1000
+
0000 0000 0000 0000 0000 0000 0000 1001 0000
=
234
0000 0000 0000 0000 0000 0000 0000 1110 1010
2)負數相乘/負數正數相乘
計算:-13*(-18)=234
-13
1000 0000 0000 0000 0000 0000 0000 0000 1101
13
0000 0000 0000 0000 0000 0000 0000 0000 1101
-18
1000 0000 0000 0000 0000 0000 0000 0001 0010
18
0000 0000 0000 0000 0000 0000 0000 0001 0010
step1:
13=0*2^30 + 0*2^29 +...+ 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0
step2:
0000 0000 0000 0000 0000 0000 0000 0001 0010
+
0000 0000 0000 0000 0000 0000 0000 0100 1000
+
0000 0000 0000 0000 0000 0000 0000 1001 0000
=
234
0000 0000 0000 0000 0000 0000 0000 1110 1010
對符號位進行異或
234
0000 0000 0000 0000 0000 0000 0000 1110 1010
3)結果溢出
計算:(2^31-1)*2=2^32-2
2^31
0111 1111 1111 1111 1111 1111 1111 1111 1111
2
0000 0000 0000 0000 0000 0000 0000 0000 0010
step1:
2^31=1*2^30 + 1*2^29 +...+ 1*2^3 + 1*2^2 + 1*2^1 + 1*2^0
step2:
0000 0000 0000 0000 0000 0000 0000 0000 0010
+
.
.
.
+
0100 0000 0000 0000 0000 0000 0000 0000 0000
+
1000 0000 0000 0000 0000 0000 0000 0000 0000
=
1111 1111 1111 1111 1111 1111 1111 1111 1110

四、除法

1)被除數 > 除數
計算:18/13 = 1...5
18
0000 0000 0000 0000 0000 0000 0000 0001 0010
13
0000 0000 0000 0000 0000 0000 0000 0000 1101
從左向右依次取出一位被除數與除數比較,直到被除數到達最后一位,忽略前邊0
1 < 0000 0000 0000 0000 0000 0000 0000 0000 1101
結果0 余數 1
10 < 0000 0000 0000 0000 0000 0000 0000 0000 1101
結果0 余數 10
100 0< 0000 0000 0000 0000 0000 0000 0000 0000 1101
結果0 余數 100
1001 < 0000 0000 0000 0000 0000 0000 0000 0000 1101
結果0 余數 1001
10010 > 0000 0000 0000 0000 0000 0000 0000 0000 1101
結果1 余數 10010-1101 = 0 0101
結果 0 0001 = 1
余數 0 0101 = 5
2)被除數 < 除數
計算:13/18 = 0...13
13
0000 0000 0000 0000 0000 0000 0000 0000 1101
18
0000 0000 0000 0000 0000 0000 0000 0001 0010
從左向右依次取出一位被除數與除數比較,直到被除數到達最后一位,忽略前邊0
1 < 0000 0000 0000 0000 0000 0000 0000 0001 0010
結果0 余數 1
11 < 0000 0000 0000 0000 0000 0000 0000 0001 0010
結果0 余數 11
110 0< 0000 0000 0000 0000 0000 0000 0000 0001 0010
結果0 余數 110
1101 < 0000 0000 0000 0000 0000 0000 0000 0001 0010
結果0 余數 1101
結果 0
余數 1101 = 13


免責聲明!

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



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