计算机中加减乘除的实现

在计算机中各种运算都是CPU来完成的,而CPU在算术运算上只能做加法和移位和取反运算,在逻辑上只有与、或、非、异或。那么计算机中的减法、乘法、除法又是如何运算的?

1.加法

数据在内存中以二进制补码的形式存储,CPU在进行加法运算时直接将两个操作数的二进制补码相加,在转换成原码即可。

2.减法

CPU做减法时,将减数取反,在与被减数相加得到结果。

示例1:15-8 = 7

15-8 = 15 + (-8),也就是取减数的相反数进行相加。15的二进制补码:0000 0000 0000 0000 0000 0000 0000 1111,-8的二进制补码:1111 1111 1111 1111 1111 1111 1111 1000

0000 0000 0000 0000 0000 0000 0000 1111 +  1111 1111 1111 1111 1111 1111 1111 1000 = 0000 0000 0000 0000 0000 0000 0000 0111 = 7D

示例2:6 - 8 = -2

6 - 8 = 6 + (-8) ,6的二进制补码:0000 0000 0000 0000 0000 0000 0000 0110,-8的二进制补码:1111 1111 1111 1111 1111 1111 1111 0111

0000 0000 0000 0000 0000 0000 0000 0110 +  1111 1111 1111 1111 1111 1111 1111 0111 = 1111 1111 1111 1111 1111 1111 1111 1101(补码)= 1000 0000 0000 0000 0000 0000 0000 0010 = -2

这里需要注意的是,计算完后直接得到的是补码,要将补码再转换成原码才是最终的结果。整数之所以不需要转换是因为整数的原码、反码、补码均相同。

3.除法

计算机在进行除法运算时,和人计算除法的原理很相似,也是商x余y的形式,只是计算机处理的是二进制数。

示例:15/7 = 2....1

15的二进制表示为:0000 0000 0000 0000 0000 0000 0000 1111,7的二进制表示为:0000 0000 0000 0000 0000 0000 0000 0111

1.二进制15的最左边的第一位1右移3位(二进制8中有三个1),的结果为0001 < 0111所以,商0余1.

2.上一步中的余数*2 + 下一位 = 11右移2位的结果为0011 < 0111,商00余11

3.上一步中的余数*2 + 下一位 = 111右移1位的结果为0111 = 0111,商001余0

4.上一步中的余数*2 + 下一位 = 1右移3位的结果为0001 < 0111,商0010余1

所以最终结果就为0010余1,即7....1

二进制的除法,商只有0和1两种结果,所以只要比较被除数小于等于除数直接商1,余被除数-除数,以此类推。

4.乘法

计算机中,一个数左移一位代表乘以2,右移一位代表除以2。例如:2->0010->左移一位:0100->4.所以,在计算机中对于a*x的运算实际是将a左移x为1的位的所有结果累加。

示例1: 3*6 = 18

这里的a = 3 = 0011,x = 6 = 0110.

1.x的第0位为0,a不用移动。

2.x的第1位为1,所以a左移1位 -> 0110

3.x的第2位为1,所以a左移2位->1100

4.x的第3位为0,a不用移动,

所以,最终结果就是:0110 + 1100 = 10010 = 18

 

猜你喜欢

转载自blog.csdn.net/qq_47406941/article/details/110135857