数据的类型:
按数制分::
十进制:在微机中直接运算困难;
二进制:占存储空间少,硬件上易于实现,易于运算;
十六进制:方便观察和使用;
按数据格式分:
真值:没有经过编码的直观数据表示方式,带正负号的数据,任何数制均可
机器数:符号化后的数值表示;
- 符号也被编码,不能随便忽略任何位置上的0或1;
- 位数固定,一般为字节整倍数,如8位、16位、32位;
- 可用原码、反码、补码、移码等形式编码;
按数据的表示范围分:
定点数:小数点位置固定,数据表示范围小
浮点数:小数点位置不固定,数据表示范围较大
按能否表示负数分:
无符号数:数据所有位均为表示数值,只能表示正数;
有符号数:有正负之分,最高位为符号位,其余位表示数值。
1. 数据与文字的表示方式
1.1 数据格式
- 在选择计算机的数的表示方式时,需要考虑以下因素:
①:要表示的数的类型(小数、整数、实数、复数)
②:可能遇到的数值范围
③:数值的精确度
④:数据存储和处理所需要的硬件代价
计算机中常用的数据表示格式有两种一是定点格式
,二是浮点格式
。一般来说,定点格式容许的数值范围有限,要求的处理硬件比较简单,而浮点格式容许的数值范围很大,要求处理的硬件比较复杂。
- 定点数的表示方法
一个定点数由符号位和数值域两个部分组成。按小数点位置不同,定点数有纯小数
和纯整数
两种表示方法。
纯小数:
表示形式: x=x0x-1x-2…x-n
有符号数 x=xSx-1x-2…x-n, 0≤ |x|≤1-2-n ;xS为符号位
无符号数 x=x0x-1x-2…x-n, 0≤x ≤1-2-n
数据表示范围 0.0…0 = 0 ≤ |x| ≤ 1-2-n = 0.1…1
纯整数:
表示形式 x=x0xnxn-1…x0
有符号数 x=xSx n-1 … x 1 x 0 |x|≤2n-1 ;xs为符号位
无符号数 x=xnx n-1 … x 1 x 0 ,0≤x≤2n+1-1 ;xn为数值位
- 浮点数的表示方法
浮点表示法:在计算机中把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示,其中相当于数的小数点位置随比例因子的不同而在一定范围内可以自由浮动。
浮点数:小数点位置可变,形如科学计数法中的数据表示。
浮点数格式定义:N=Re×M
例:
任意一个十进制数N可以写成:N=10E.M
任意一个二进制数N可以写成:N=2e.M
M:尾数( mantissa),一个纯小数,表示数据的全部有效数位,其位数决定着数值的精度;
R:基数( radix),可以取2、8、10、16,表示当前的数制;微机中,一般默认为2,隐含表示。
e:阶码( exponent),是一个整数,用于指出小数点在该数中的位置,其位数决定着数据的取值范围
机器数的一般表示形式:
- 按IEEE745标准,一个浮点数由符号位S,阶码E,尾数M三个域组成。其中阶码E的值等于指数的真值e加上一个固定偏移值。
32位浮点数:
64位浮点数:
- 十进制数串的表示方法
为了使计算机能直接处理十进制形式的数据,采用两种表示形式:
① 字符串形式,即一个字节存放在一个十进制的数位或符号位。除保存各数位,还需要指明该数存放的起始地址和总位数;主要用在非数值计算的应用领域;
② 压缩的十进制数串形式,采用BCD码表示,即一个字节存放两个十进制的数位。节省存储空间,用于直接完成十进制数的算术运算。用特殊的二进制编码表示数据正负,如1100—正、1101—负。
1.2 数的机械码表示
- 为了区别一般书写表示的数和机械中把符号位和数值位一起编码来表示相应的数的各种表示方法表示的数(
原码、反码、补码、移码
),通常将前者称为真值,后者称为机器数或机器码。 - 数的真值变成机器码时有四种表示方法:
原码表示法,反码表示法,补码表示法,译码表示法
。其中移码主要用于表示浮点数的阶码E,已利于比较两个指数的大小和对阶操作。
1. 原码表示法
若定点整数的源码形式位xnxn-1…x1x0(xn为符号位),则原码表示的定义是:
2. 补码表示法
若定点整数的补码形式位xnxn-1…x1x0(xn为符号位),则补码表示的定义是:
正负整数的补码于真值的关系:
3. 移码表示法
移码通常用来表示浮点数的位阶。由于阶码是k位的整数,假定定点整数移码形式为:ekek-1…e2e1e0时移码的传统定义是:
1.3 字符于字符串的表示方法
- 在数字计算机中只能处理二进制数据,一些特殊的信息应用到计算机时必须编写成二进制格式的补码,称为
符号数据
。
字符信息属于符号数据,是处理非数值领域的问题。国际上采用的字符系统是七单位的ASCII码。
● 字符串
指连续的一串字符,每个字节存一个字符。当存储字长为2、或4个字节时,在同一个存储单元中;
可按从低位字节向高位字节的顺序存放字符串的内容,或按从高位字节向低位字节的次序顺序存放字符串的内容。
● ASCII码(美国国家信息交换标准字符码),包括128个字符,共需7位编码;
ASCII码规定:最高位为0,余下7位作为128个字符的编码,最高位的作用:奇偶校验,扩展编码
ASCII字符编码表:
1.4 汉字的表示方法
-
使用西方标准键盘输入文字,进行处理,并显示打印汉字,是一项重大成就。为此要解决汉字的
输入编码、汉字内码、字模码
等三种不同用途的编码。 -
汉字的输入编码:
- 数字编码:常用的是国际区位码,用字符串代表一个汉字输入。
优点:无重码,输入码与内部编码的转换比较方便 / 缺点:代码难以记忆 - 拼音码:以汉字拼音为基础的输入方法
优点:凡掌握汉语拼音的人不需要练习即可使用 / 缺点:输入重复率过高 - 字形编码:用汉字的形状来编码
- 数字编码:常用的是国际区位码,用字符串代表一个汉字输入。
-
汉字内码:
汉字内码是用于汉字信息的存储、交换、检索等操作的机内代码,一般采用两个字节表示。 -
汉字字模码:
字模码是用点阵表示的汉字字形代码,它是汉字的输出形式。
1.5 校验码
- 数据校验原因
元件故障,噪声干扰等各种因素常常导致计算机在处理信息过程中出现错误。为了防止错误,可以将信号采用专用的逻辑电路进行编码已检测错误,甚至矫正错误。 - 数据校验码的定义
能够发现某些错误或具有自动纠错能力的数据编码,也称检错码;
最简单且应用广泛的检错码是采用一位校验位的奇校验或偶校验。
设X=(x0x1…xn-2xn-1)是一个n位字,则奇校验位C-定义为:
奇校验位C定义为:
数据校验的基本原理是扩大码距
;
码距:任意两个合法码之间不同的二进制位的最少位数,仅有一位不同时,称其码距为1。
为运算器构造的简单性,运算方法中算术运算通常采用补码加、减法,原码乘除法或补码乘除法。为了运算器的高速性和控制的简单性,采用了先行进位、阵列乘除法、流水线等并行技术措施。
2.定点加法、减法运算
2.1 补码加法
- 当负数用补码表示后,就可以和正数进行一样的处理,这样运算器只需要一个加法器就可以了,不必为了负数在配一个减法器。
补码加法的公式:
2.2 补码减法
- 负数加法要利用补码化为加法来做,同样补码减法也要化为加法来做
补码减法公式:
2.3溢出概念和检测方法
-
在定点整数机器中,数的表示范围|x|<(2n-1)。在运算过程中如出现
大于字长绝对值现象
,称为"溢出"。 -
正溢:两个正数相加,结果大于机器字长所能表达的最大正数。
-
负溢:两个负数相加,结果大于机器字长所能表达的最小负数。
-
溢出判别方法
● 直接判别法:- 方法:
同号补码相加,结果符号位与加数相反;
异号补码相减,结果符号位与减数相同; - 特点:硬件实现较复杂;
举例:
若[x]=0101,[y]补=0100,则 [x+y]补=1001上溢
若[x]=1011,[y]补=1100,则 [x+y]补=0111 下溢
若[x]=0101,[y]补=1100,则 [x-y]补=1001 上溢
● 变形补码判别法
- 变形补码,也叫模4补码:采用双符号位表示补码
●判别方法:
- 特点:硬件实现简单,只需对结果符号位进行异或
举例:
若[x]补=00101,[y]补=00100,则[x+y]补=01001上溢
若[x]补=11011,[y]补=11100,则[x+y]补=10111下溢
若[x]补=00101,[y]补=11100,则[x-y]补=01001上溢
● 进位判别法
- 判别方法:
最高数值位的进位与符号位的进位是否相同;
判别公式:
溢出标志v= Cf ⊕Cn-1
其中C为符号位产生的进位,Cn-1为最高数值位产生的进位。
- 方法:
3.定点乘法运算
- 串行乘法:
分析笔算乘法:
A=-0.1101 B=0.1011
A×B=-0.10001111 乘积的符号心算求得
符号位单独处理,乘数的某一位决定是否加,被乘数4个位积一起相加,乘积的位数扩大了一倍。
改进:
A·B=A·0.1011
=0.1A+0.00A+0.001A+0.0001A
=0.1A+0.00A+0.001(A+0.1A)
=0.1A+0.01[0·A+0.1(A+0.1A)]
=0.1{A+0.1[0·A+0.1[A+0.1A)]}
右移一位 =2-1{A+2-1[0·A+2-1[A+2-1(A+0))]}
第一步:被乘数 :A+0
第二步:部分积右移1位
,得新的部分积
第三步:部分积+被乘数
…
第八步部分积右移1位
,得结果
乘法运算=加法+移位
,若乘数数值位n=4,则累加4次,移位4次;- 乘法过程
由乘数的末位决定被乘数是否与原部分积相加,被乘数只与部分积的高位相加
部分积右移一位形成新的部分积;
同时乘数右移一位(末位移丢);
空出高位存放部分积的低位 - 硬件构成
3个具有移位功能的寄存器、一个全加器
- 乘法过程
3.1 原码并行乘法
- 1.人工算法于机械算法的同异性
在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两位的符号位按异或运算的到,而乘积的数值部分则是两个正数相乘之积。
设n位被乘数和乘数用定点整数表示,有:
式中,xf位被乘数符号,yf为乘数符号
例题:设x=1101,y=1011,用习惯方法求其成绩过程如下:
- 2.不带符号的阵列乘法器
●不带符号的阵列乘法器
设有两个不带符号的二进制整数:
他们的数值分别为a,b:
a,b相乘产生m+n位乘积P:
运算过程:
在m位乘n位不带符号整数的列阵乘法中加法-移位操作的被加矩阵中,每一部分乘积项aibj叫做一个被加数。这m×n个被加数{aibj|0<=i<=m-1 和 0<=j<=n-1}可以用m×n个"与"门并行的产生。
例:两个不带符号的二进制整数A=11011,B=10101,求每一部分乘积项aipj的值与p9p8…p0。
- 5位×5位不带符号的列阵乘法器逻辑电路图:
3.2直接补码并行乘法
- 补码于真值的转化公式
补码乘法因为符号位参与运算,可以完成不码数的"直接乘法",而不需要求补级。这种直接的方法排除了较慢的对2求补操作,因而大大加速了乘法过程。 - 假定一个定点补码整数[N]补=anaaa,(an是符号位)。根据[N]补的符号,补码数和真值N的关系可以表示为:
4.定点除法运算
-
恢复余数法:机器在除法运算过程中,必须先进性减法,若余数为正,则够减;若余数为负,则不够减。不够减时必须恢复原来的余数,一边继续往下运算,这种方法被称为恢复余数法。(因为运算过程中步数不固定,控制比较复杂,在实际中并常用)
-
加减交替法:在运算过程中出现不够减的情况时,不恢复余数,根据余数符号继续往下运算。(步数固定,控制简单)
-
4.1原码除法原理
两个原码表示的数相除时,商的符号位由两数的符号位相加求得,商的数值部分由两数的数值部分相除求得。
例:设被除数x=0.1001,除数y=0.1011,模仿十进制除法运算过程如下:
-
4.2并行除法器
1.可控加法/减法(CAS)单元- 和列阵乘法器类似,阵列除法器也是一种并行运算部件,采用大规模集成电路制造。与早期的串行除法器相比,阵列除法器不仅所需要的控制线路少,而且能够提供令人满意的高运算速度。
CAS单元的输入与输出关系可以用如下方程式表示:
2.不恢复余数的阵列除法器
- 不恢复余数的除法也称为加减交替法。在不恢复余数的除法阵列中,每一行所执行的操作究竟是加法还是减法,取决于前一行输出的符号与被除数的符号是否一致。当出现不够减时,部分余数相对于被除数来说要改变符号。这时应该产生一个商位"0",除数首先沿对角线右移,然后加到下一行的部分余数上。当部分余数不改变它的符号时,即产生商位"1",下一行的操作应该位减法。
- 和列阵乘法器类似,阵列除法器也是一种并行运算部件,采用大规模集成电路制造。与早期的串行除法器相比,阵列除法器不仅所需要的控制线路少,而且能够提供令人满意的高运算速度。
例题:x=0.101001,y=0.111,求x÷y。
对于一个2n位除以n位的不恢复余数阵列除法器来说,单元的数量为(n+1)2,考虑到最大情况下的信号延迟,其除法执行时间为:
- 4位除4位阵列除法器逻辑结构图:
5.定点运算器的组成
- 运算器时数据加工处理部件,是CPU的重要组成部分。其最基本结构包括:算术/逻辑运算单元、数据缓冲寄存器、通用寄存器、多路转换器和数据总线等逻辑部件。
- 算机中的逻辑运算,主要值逻辑非、逻辑加、逻辑乘、逻辑异等四种基本运算。
5.1逻辑运算
1.逻辑非运算
求反运算。对某数进行逻辑非运算,就是按位求它的反,常用变量上方加一横来表示。
例题:
2.逻辑加运算
对两个数进行逻辑加,就是按位求它们的"或",所以逻辑加又称逻辑或,常用记号"+",来表示。
例题:
3.逻辑乘运算
对两数进行逻辑乘,就是按位求它们的"与",所以逻辑乘又称逻辑与。
例题:
4.逻辑异运算
对两数进行逻辑异就是按位求它们的模2和,所以逻辑异又称为位加。
例题:
定点运算和浮点运算扽结构复杂度不同。早期微型机中浮点运算器放在CPU芯片外,随着高密度集成电路技术的发展,现已移至CPU内部。
6.浮点运算方法和浮点运算器
- 6.1 浮点加法、减法运算
设两个浮点数x和y,它们分别为:
其中,Ex和Ey分别是数x和y的阶码,Mx和My为数x和y的尾数。
两浮点数进行加减运算的运算规则是:
完成浮点数加减运算的操作过程大体分为四步:
①:0操作数检查
②:比较阶码大小,并进行对阶
③:尾数进行加或减运算
④:结果规格化,并进行舍入处理
大致操作流程如下:
(1).0操作数检查
浮点加减运算比较复杂。如果判知两个操作数x或y中有一个数为0,即可得知运算结果而没有必要在进行一系列操作,以节省操作时间。
(2).比较阶码大小并完成对阶
两浮点数进行加减,首先要看两数的阶码是否相同,即小数点位是否对齐。若两数阶码相同,表示小数点是对齐的,就可以进行尾数的加减运算。反之,若两位阶码不同,表示小数点为没有对其,此时必须使两位的阶码相同,这个过程叫做对阶。
要对阶首先要求两阶码之差:
△E=Ex-Ey
若△E相等则表示两数阶码相等,Ex=Ey
若△E>0,Ex>Ey
若△E<0,Ex<Ey
在浮点数对阶时总是遵循小阶向大阶看齐原则,小阶的尾数向右移位(相当于小数点向左移位),每右移一位阶码加1,直到两数的阶码相等为止,右移的位数等于阶差△E。
(3).位数求和运算
对阶结束后,即可进行尾数的求和运算。不论是加法运算还是减法运算,都按加法进行操作,其方法与定点加法完全一致。
(4).结果规格化
在浮点加减运算中,尾数的求和结果也可能得到01. &…&或 10. &…&,即两符号位不相等,这表示位数求和结果的绝对值大于1,向左破坏了规格化。此时应该将尾数运算右移以实现规格化表示,称为向右规格化,既尾数右移1位,阶码加1.当尾数不是1.M时需要向左规格化。
(5).舍入处理
再对阶或向右规格化时,尾数要向右移位,这样,被右移的尾数的低位部分会被丢掉,从而造成一定误差,因此要进行舍入处理。
-
IEEE745标准中舍入处理的四种办法:
- 就近舍入:其实质就是四舍五入,例如。尾数超过规定的23位的多余位数字时10010,多余位多余位的值超过规定最低有效位值的一半,故最低有效位值增1。如果是01111,则直接截尾就行了。像10000这种特殊情况看最低位为1还是0,若为0则截尾,若为1则进1。
- 朝0舍入:朝着数轴原点方向舍入,即简单的截尾。
- 朝+∞舍入:对正数来说,直接进一;对于负数来说,直接截尾。
- 朝-∞舍入:处理方法和+∞正好相反。
-
溢出处理:
- 浮点数的溢出是以其阶码溢出变现出来的。在加减运算过程中要检查是否产生溢出:若阶码正常,加减运算正常结束;若阶码溢出,则进行相应的处理。另外对尾数的溢出也需要处理。
阶码上溢:超过了阶码可能表示的最大值的正指数值,一般将其认为是+∞和-∞。
阶码下溢:超过了阶码可能表示的最小值的负指数值,一般将其认为是0。
尾数上溢:两个同符号尾数相加产生了最高位向上的进位,要将尾数右移,阶码增1来从新对齐。
尾数下溢:在将尾数右移是,尾数的最低位从尾数域右端流出,要进行舍入处理。
- 浮点数的溢出是以其阶码溢出变现出来的。在加减运算过程中要检查是否产生溢出:若阶码正常,加减运算正常结束;若阶码溢出,则进行相应的处理。另外对尾数的溢出也需要处理。
-
6.2 浮点乘法、除法运算
设两个浮点数x和y,它们分别为:
其中,Ex和Ey分别是数x和y的阶码,Mx和My为数x和y的尾数。
两浮点数进行乘法运算的运算规则是:
两浮点数进行除法运算的运算规则是:
-
在乘法运算中,乘积的尾数是相乘两数的尾数之积,乘积的阶码是相乘两数的阶码之和。
-
在除法运算中,商的尾数是相除两数的尾数之商,商的阶码是相乘两数的阶码之差。
完成浮点数乘除运算的操作过程大体分为六步:
①:0操作数检查,如果被除数x为0,则商为0,如果除数y为0,则商为∞;
②:阶码加减操作;
③:尾数乘除操作;
④:结果规格化;
⑤:进行舍入处理;
⑥:确定积的符号;
大致操作流程如下:
(1).浮点数的阶码运算
浮点数除法中.对阶码的运算由+1,-1,两阶码求和,两阶码求差四种,运算时必须检查结果是否溢出.
(2).尾数处理
浮点数加法对结果的规格化及舍入处理也适用于浮点乘除法.
第一种简单办法是,无条件第丢掉正常尾数最低位之后的全部数值(截断处理)
第二种办法是,运算过程中右移中移出的若干高位值,最后按某种规则用这些位上的值来修正尾数(舍入处理)