2.1、加法运算
加法器:对于1位的二进制加法,相关的有五个的量:1,被加数A,2,被加数B,3,前一位的进位CIN,4,此位二数相加的和S,5,此位二数相加产生的进位COUT。前三个量为输入量,后两个量为输出量,五个量均为1位。
计算机的加法器都是以上面的逐位进位加法器优化而来,不再深入探索,有兴趣的可自行查找资料。
加法器原理就是用门电路实现二进制的相加运算。
2.2、减法运算
在计算机中,加法和减法其实是一种运算,原因在于计算机表示负数的方法。
计算机中的数据存储时都会转化成相应的二进制补码,补码有三个特性:
1、一个负整数(或原码)与其补数(或补码)相加,和为模。
2、对一个整数的补码再求补码,等于该整数自身。
3、补码的正零与负零表示方法相同。
模的定义:“模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。例如:
时钟的计量范围是0~11,模=12。表示n位的计算机计量范围是0~2^(n)-1,模=2^(n)。
“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算。
例如:假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨4小时,即:10-4=6;另一种是顺拨8小时:10+8=12+6=6
举例:
1、如计算机要计算8-3
2、存储8为:0000 1000 (正数的补码与原码相同)
3、存储-3为:1111 1101 (负数的补码为符号为定为1,其他位求反码后加1)
4、8-3 可直接用加法器做加法运算8 + (-3) 二进制可得:0000 0101 转化为十进制为:5
2.3、乘法运算
我们计算两个数相乘时一般如下计算:
其实加法器也是模拟这样的过程,只不过是改为了二进制数而已。计算机通过加法器和适当的移位操作完成了乘法运算。
例子:
1011 X 1001 用十进制表示为 11X9 结果当然为99
以上文章中有很多乘法器的优化,我只讲我觉得好理解的一个
一、乘数寄存器四位保存1011。
二、被乘数寄存器四位保存1001。
三、乘积寄存器八位保存乘积,初始0000 0000,乘积寄存器只前四位参与运算,后四位只为记录。
1、第一次运算取乘数最后一位 得1,乘积寄存器前四位加 被乘数 得 1001 0000
2、乘数寄存器右移一位得:0101 乘积寄存器右移一位得 0100 1000
3、第二次运算重复步骤1、2 得,乘数:0010 乘积:0110 1100
4、如此,乘数有几位就重复次几运算,当乘数最后一位为0 时不做加操作,只进行移位。
5、第三次运算得,乘数:0001 乘积: 0011 0110
6、第四次运算得,乘数:0000,四次后整个运算完成,乘积:0110 0011 转化为十进制为:99
如上步骤中我们可以看出,计算机计算乘法跟我们计算乘法时的步骤一样,我们用乘数的个十百千们分别与被乘数相乘,然后错位相加得积,计算积也是把乘数的第一二三四位分别与被乘数相乘(相乘时乘数为1则积为被乘数,乘数为0时则四位全为0所以此时只进行移位操作) 然后用移位操作来模拟错位相加。
2.4、除法运算
文章里也有很多除法器优化方案,我只以容易理解的说,其原理都是一般。
原理:除法可以变化为减法来算,一个数除以另一个数,可以理解为一个数循环减去另一个数减了几遍商便是几,这种方式在十进制里可能实在麻烦,但是在二进制里却简单了不少。
如果两个一位数相除8/3 可理解为8-3-3 = 2,得商为2 余数为2,但在二进制里两个一位数相除只有两种可能,一种是我大于你,商得1余数是两个数相减,另一种是我小于你商是0,余数是我本身;
如上计算方式我们十进制时也是常用的,只是我们配合九九乘法口决计算,而二进制里只需要从被除数高位开始逐位与除数相减,减的到此为得1 ,决不会有可以减两次的可能(即商不可能得2),减不到此位得0;
1、被除数十一位寄存,其实有效数字只占七位、除数四位寄存、商八位寄存,被除数参与运算的只有前四位(因为除数为四位即前四位)
2、被除数:00001001 010 除数:1000 商:0000 0000
3、参于运算的值我用红色标识: (1)被除数左移进入运算位后位补0: 00010010 100 除数:1000 减不到商得0 余为0001 商左移<1>为0000 0000
4、(2)被除数左移一位 变为:00100101 000 除数:1000 减不到此为得0 余为0010 商左移<2>为0000 0000
5、(3)被除数再左移变为:01001010 000 商左移<3>为0000 0000,(4)再左移得:10010100 000 此时可以减得 商左移<4>为0000 0001余数为:0001,被除数被减后变为:00010100 000
6、(5)被除数左移变为00101000 000 <5>商左移为00000010 (6)再左移:0101 0000 000 <6>商左移为0000 0100 (7)再左移:1010 0000 000 此时可以减得 <7>商左移为0000 1001余数为:0010 被除数被减后变为:0010 0000 000
7、被除数有几位就移动几位,商也跟着移动几位,如上图标号标识,七次移位后得商为:0000 1001 余数为:0010 后七位舍去,只要参与计算的前四位。转化为十进制为74/8 = 9 余 2
总结:除法器可以用减法替代除法,因为这样移位相减,在某一位上最多只能减一次被除数便会小于除数,所以商得1,同理十进制被除数和除数如此移位相减的话在某一位上最多只能减九次,即商最大只能为9。