计算机CPU加,减,乘,除的原理
对于计算机实现加减乘除的研究记录,如有错误还请指出
1.加法
计算机的加法就如同我们的数学计算一样,只不过是进制变成了2进制,需要满2进一,如5+3,二进制表示则是
0101
0011
-----
1000
加法的实现由按位加和(异或)和进位(与)两部分组成,内部的实现就是加法器
如上所示的加法器并没考虑上一位的进位问题,因为称为半加器
如果考虑进位,则需要把进位也参与运算
这样的结构就称为全加器
多个全加器组合就实现了我们计算机的加法
2.减法
计算机减法其实可以转化为加法,像指针时钟一样,我们调整时间+1,可以选择顺时针增加1,或者逆时针减少11,最终都能达到调整时间的目的
这里有个模的概念,
例如对于指针时钟来说,它的模是12,
对于电子时钟来说,它的模则是24,
对于二进制8位运算来说,它的模就是128
对于可以取模的运算,减法都可以转化为加法
对于计算机的运算也是一样,如8位运算,除去一位符号位,进行运算减1,可以转化为加127来实现,这也是计算机实现减法转换加法的原理
了解减法还需要先了解原码,反码,补码的概念
原码:带符号位的,其余位表示数值
反码:正数的反码是原码,负数的反码是除了符号位之外,其余位取反
补码:正数的补码是原码,负数的补码是反码加一
计算机的运算普遍采用的都是补码,采用补码的优势是可以将减法转化为加法,这样可以使用加法器实现减法,降低电路复杂度,提高计算效率。另外使用补码也可以避免+/- 0的问题
如-1+3二进制表示则为
10000001
00000011
---------
取反码则为
11111110
00000011
---------
取补码则为
11111111
00000011
---------
00000010
结果为2
其实补码运算得出结果后还需对结果进行一次取补操作,这是为了对符号位的处理,如-3+1
补码计算则为
11111101
00000001
---------
11111110
结果是-126
我们需要对结果再取一次补码
11111110 -> 10000001 -> 10000010
结果是-2
部分的疑问和理解:
1.取补码问什么要加1?
取补码相当于模减去原码(不考虑符号位),既时钟问题的向前拨动1,和向后拨动11,
8位二进制,1的补码则为127
取反,0000001取反为1111110(不考虑符号位),既1和126,需要反码+1才能得到补码
2.计算机为什么使用补码进行运算?
可以避免对于+/-符号的判断,不管是加法还是减法都是加法运算,还能避免+/-0的歧义,而且还能多表示一个负数(如8位数的-128)
全都转化为加法还能降低电路复杂性,提高计算速度
3.乘法
计算机乘法是移位和累加实现的,每位的数字代表需要移动几位,如5*3,二进制表示
00000101
00000011
---------
00000101
00001010 //移位
---------
00001111
4.除法
计算机除法的实现是移位和累减,首先对齐除数和被除数,对齐后相减,
如果结果大于等于0,则记录商1;如果结果小于0,则记录商0
之后右移,结果作为下次运算的被除数,并将商左移
循环这个过程,直到除数移回原位,并记录余数
00001110
00000010
---------
00001110
00001000 // 左移对齐
---------
00000110 // 记录商1 (0001)
00000100 // 右移
---------
00000010 // 商左移并记录商1 (0011)
00000010 // 右移
---------
00000000 // 商左移并记录商1 (0111)
// 余数为0
因为减法是加法实现的,因此除法的效率是最慢的
图片资源来源: