在计算机中参与运算的数有两大类:无符号数、有符号数
1.机器数与真值
对于有符号数而言,在计算机中用0->正,1->负,相当于符号被数字化了,并规定放在有效数字的前面,即组成了有符号数。
例如,有符号数的小数表示:
在运算过程中,
符号位能否和数值部分一起参加运算?
如果参加运算,符号位又需作哪些处理?
这些问题都与符号位和数值位所构成的编码有关,这些编码就是原码、反码、补码、移码。
整数原码的定义为:
补数表示法
反码表示法
移码表示法
在计算机中,小数点不用专门的器件表示,而是按照约定的方式给出,有两种表示方法表示小数点的存在,即定点表示和浮点表示。
定点表示的数称为定点数,浮点表示的数称为浮点数。
实际上计算机中处理的数不一定是纯小数or纯整数,而且有些数据的数值范围相差很大,它们都不能直接用定点小数or定点整数表示,但是均可以用浮点数表示。
浮点数即小数点的位置可以浮动的数
比如:
352.47 = 3.5247 x 102
= 3524.7 x 10-1
= 0.35247 x 103
显然,这里的小数点的位置是变化的,但因为分别乘上了不同的10的方幂,故值不变。
通常,浮点数被表示成:
N = S x rj
其中S为尾数(可正可负),j为阶码(可正可负),r是基数(也叫基值)。在计算机中基数可以取2、4、8、16等等。
以基数r=2为例,数N可以写成下列不同的形式:
N = 11.0101
= 0.110101 x 210
= 1.10101 x 21
= 1101.01 x 2-10
= 0.00110101 x 2100
…
为了提高数据精度以及便于浮点数的比较,在计算机中规定浮点数的尾数用纯小数形式,故上例中0.110101 x 210和0.00110101 x 2100形式是可以采用的。
此外将尾数最高位为1的浮点数称为规格化数,即N=0.110101 x 210为浮点数的规格化形式。
浮点数表示成规格化形式后,其精度最高。
浮点数的表示形式
浮点数在机器中的形式如下所示,采用这种数据格式的机器称为浮点机。
浮点数由阶码j和尾数S两部分组成,阶码是整数,阶符和阶码的位数m合起来反映浮点数的表示范围及小数点的实际位置,尾数是小数,其位数n反映了浮点数的精度,尾数的符号St代表浮点数的正负。
浮点数的表示范围
以通式**N= S x rj**为例,设浮点数阶码的数值位取m位,尾数的数值位取n位,当浮点数为非格式化数时,它在数轴上的表示范围如下面图所示:
浮点数的规格化
为了提高浮点数的精度,其尾数必须为格式化数,如果不是格式化数,就要通过修改阶码并同时左右移尾数的办法,使其变成规格化数,将非规格化数转换成规格化数的过程称为规格化。
对于基数不同的浮点数,因其规格化数的形式不同,规格化的过程也不同。
**当基数为2时,尾数最高位为1的数为规格化数。**规格化时,尾数左移一位,阶码-1 (这叫做向左规格化—左规),尾数右移一位,阶码+1(这叫做为向右规格化—右规)。
当基数为4时,尾数的最高两位不全为0的数为规格化数。规格化时,尾数左移两位,阶码-1(左规),尾数右移两位,阶码+1(右规)。
当基数为8时,尾数的最高三位不全为0的数为规格化数。规格化时,尾数左移三位,阶码-1(左规),尾数右移三位,阶码+1(右规)。
同理可以推的基数为2n的任何数的规格化过程。
浮点机中一旦基数确定后就不再变了,而且基数都是隐含的,故不同基数的浮点数表示形式完全相同。但基数不同,对数的表示范围和精度等都有影响。一般来说,基数r越大,可表示的浮点数范围越大,而且所表示的数的个数越多,但r越大,浮点数的精度反而下降。如r=16的浮点数,因其规格化数的尾数最高三位可能出现0,故与其尾数位数相同的r=2的浮点数相比,后者可能比前者多三位精度。
定点运算包括移位、加、减、乘、除几种。
+ 溢出判断
判断补码定点加减运算溢出的方法有两种:
在计算机中,乘法运算是一种很重要的运算,有的机器由硬件乘法器直接完成乘法运算,有的机器内没有乘法器,但可以按照机器做乘法运算的方法,用软件编程实现。因此学习乘法运算方法不仅有助于乘法器的设计,有有助于乘法编程。
先分析一下笔算乘法,然后介绍机器中几种乘法运算方法。
1.分析笔算乘法
2.笔算乘法的改进
计算机很容易实现这种运算规则。用一个寄存器存放被乘数,一个寄存器存放乘积的高位,另一个寄存器存放乘数及乘积的低位,再配上加法器及其他相应电路,就可以组成乘法器。又因为加法只在部分积的高位进行,故不但节省了器材,而且还缩短了运算时间。
3.原码乘法
由于原码表示与真值相似,只相差一个符号,而乘积的符号又可以通过两数符号的逻辑异或求得,因此,上述讨论的结果可以直接用于原码一位乘,只需加上符号位处理即可。
4.补码乘法
【这玩意太难了,2333,有必要(考研)再去看】
【和乘法运算一样,都有点难】
从第二节对浮点数的讨论可知,机器中任何一个浮点数都可以写成如下形式:
x = Sx * rjx
其中,Sx为浮点数的尾数,一般绝对值小于1的规格化数(补码表示时允许为-1),机器中可用原码或补码表示,jx为浮点数的阶码,一般为整数,机器中大多用补码或移码表示,r为浮点数的基数,常用2、4、8或16表示,下面对浮点数四则运算都是以基数为2来进行讨论。
针对每一种算术运算,都必须有一个相对应的基本硬件配置,其核心部件是加法器和寄存器。当需要完成逻辑运算时,势必需要配置相应的逻辑电路,而ALU电路是既能完成算术运算又能完成逻辑运算的部件。
下图是ALU框图,图中的Ai和Bi为输入遍历,ki为控制信号,ki的不同取值可决定该电路作哪一种算术运算或哪一种逻辑运算,Fi为输出函数,会输出运算的结果。
现在ALU电路已制成集成电路芯片,例如,74181是能完成4位二进制代码的算逻运算部件,外特性如下图所示:
74181有两种工作方式,即正逻辑和负逻辑,分别如图6.17(a)和(b)所示,下面的表列出了算术/逻辑运算功能,逻辑电路也在下面:
随着操作数位数的增加,电路中进位的速度对运算时间的影响也越来越大,为了提高运算速度,本节将通过对进位过程的分析设计快速进位链。