计算机中数的运算
上篇讲到计算机中数字都是以二进制存储的,这篇我们讲讲计算机中如何进行对这些数据进行运算。计算机中的运算可以分为两大类:算数运算和逻辑运算。
算数运算
整数的算数运算
所有类似于加减乘除的算术运算均适用于整数。不过,我们只讨论加和减。乘法(除法)运算可以在软件中通过连加(连减)的方法,或在硬件中通过其他技术实现。
对整数的所有表示形式均可以进行加减运算,不过我们讨论二进制补码形式,因为当前的计算机均以这种方式存储整数。
加法:
二进制补码中的加法就和十进制的加法一样:位与位相加,如果有进位,就加到下一位上。
溢出:
溢出是指当试图把一个数存储在超过地址分配所定义的范围而发生的错误,当使用N个位进行二进制加法运算时,务必使每个数的结果在已定义的二进制补码表示的范围之内。
减法:
二进制补码表示的一个优点就是它的加法和减法之间没有区别。在进行减法运算时,首先把减数取反,再与被减数相加。即: a-b=a+(-b)
浮点数的算数运算
浮点数也可以进行包括加减乘除在内的算数运算。但是我们只重点讨论加法减法,因为乘法和除法只是加法减法的多次重复运算。
浮点数的加减法,再被IEEE标准格式规范化之后变得详尽而又复杂。我们在这里并不对其所有细节和特例进行分析,只是给出总体概述:
加法和减法:
浮点数加减法是同一个处理过程,步骤如下:
1)检验符号
a.如果符号相同,相加其绝对值,结果符号与他们相同。
b.如果符号不同,比较绝对值,绝对值大的减去小的,结果符号取绝对值大的一方。
2)移动小数点,使两者指数相同。也就是说,当指数不同时,数值小的一方将小数点左移,使数值相同
3)将尾数进行加减运算(包括整数和小数部分)
4)将规范化结果存入内存中
5)检查是否溢出
逻辑运算
一个位可能是0或1,可以假设0代表逻辑假,1代表逻辑真。这样,存储在计算机存储器中的位就能代表逻辑值真和假。
如果逻辑运算作用在一个输入位上,就叫做一元运算,如果作用在两个输入位上,就叫做二元运算。
一元运算
这里只讨论非运算符(NOT)
非运算符只有一个输入(位模式)。它对位进行取反,即把0转换成1,1转换成0.
二元运算符
与运算符:
与运算符是个二元运算符。输入两个操作数,输出为一个操作数。两个操作数对应的位数作为一组进行运算,当且仅当两位都是1时,结果为1,否则为0。如果有一个输入的位是0,则可不必再校验另一个输入数对应的位,直接得出结果为0。
或运算符:
或运算符是个二元运算符,输入两个操作数,输出为一个操作数。两个操作数对应的位数作为一组进行运算,当且仅当两位都是0时,结果为0,否则为1。如果有一个输入的位是1,则可不必再教研另一个输入数对应的位,直接得出结果为1.
异或运算符:
或运算符是个二元运算符,输入两个操作数,输出为一个操作数。两个操作数对应的位数作为一组进行运算,当且仅当两位相同时,结果为0,否则为1。
应用:
三种二进制逻辑运算可以用于修改位模式。可以将指定的位复位,置位或者反转。位模式可以与另一个位模式进行与、或以及异或运算而被修改,这里另一个位模式就是所谓的掩码,掩码用于修改另一个二进制位模式。
1.使指定的位复位
与运算符的一个应用就是把位模式的指定位复位(置0).为此,我们使用一个同样位长度的复位掩码。创建复位掩码的规则总结如下:
1)对于目标位模式中需要置0的位,掩码的相应位设为0
2)对于目标位模式中需要保持不变的位,掩码的相应位设为1
2.使指定的位置位
或运算符的一个应用就是把位模式的指定位置位(置1).为此,我们使用一个同样位长度的复位掩码。创建置位掩码的规则总结如下:
1)对于目标位模式中需要置1的位,掩码的相应位设为1
2)对于目标位模式中需要保持不变的位,掩码的相应位设为0
3.使指定的位反转
异或运算的一个应用是使指定位反转,也就是把指定位的值从0变成1,反之亦然。规则如下:
1)对于目标位模式中需要反转的位,掩码的相应位设为1
2)对于目标位模式中不需要反转的位,掩码的相应位设为0
移位运算
另一种常用的位运算是移位运算,位模式可以被左移或是右移。右移运算去掉最右边的一位,再将每一位右移,同时在最左位插入0.左移反之。
此运算常用语对操作数乘或除2的倍数