计算机实现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
posted @ 2020-04-18 23:25  GuDongYu  阅读(1589)  评论(0编辑  收藏  举报