0%

数据的表示和运算

进位计数制

计组知识总览2.1

一、最古老的计数方法
1、符号反映权重
2、罗马数字的几种符号与对应权重
3、基于“加法”思想的计数方法

二、十进制计数法
1、古印度人发明的阿拉伯数字:0,1,2,3,4,5,6,7,8,9
2、符号反映权重,符号所在的位置也反映权重—位权
3、基于“乘法”思想的计数方法
4、推广:r进制计数法
5、基数:每个数码位所用到的不同符号的个数,r进制的基数为r。
6、二进制适用于计算机:
(1)可使用两个稳定状态的物理器件表示
(2)0,1正好对应逻辑值假、真。方便实现逻辑运算
(3)可很方便地使用逻辑门电路实现算术运算
7、任意进制->十进制 按权展开
8、二进制<—>八进制、十六进制
二进制->八进制 3位一组,每组转换成对应地八进制符号
二进制->十六进制 4位一组,每组转换成对应地十六进制符号
八进制->二进制 每位八进制对应地3位二进制
十六进制->二进制 每位十六进制对应的4位二进制
9、二进制的表示:1010001010010B
10、十六进制的表示:1652H,0x1652(hexadecimal)
11、十进制:1652D(decimalism)
12、十进制->任意进制
整数部分 除r取余
小数部分 乘r取整

三、真值和机器数
1、真值:符合人类习惯的数字
2、机器数:数字实际存到计算机里的形式,正负号需要被“数字化”

计组知识回顾2.1
补位:整数部分在高位补位,小数部分在低位补位。
注意:有的十进制小数无法用二进制精确表示,如0.3。

BCD码

计组知识总览2.2

一、BCD码(Binary-Coded Decimal)
1、二进制:方便计算机处理
十进制:符合人类习惯,但是转换麻烦
快速转换:一一对应,四位二进制数对应一个十进制数
八四二一BDC码中9+9如果直接使用二进制加法相加来计算的话,最终结果不在有定义的范围内(0~9),需要在最终结果上加6进行修正。

计组知识回顾2.2

字符与字符串

计组知识总览2.3

一、英文字符(ASCII码)
1、数字、字母、符号共128个字符->7位二进制编码(2^7 = 128)
为了存入计算机方便,通常在最高位补0,凑足1B。
2、可印刷字符:32~126,其余为控制、通信字符(0~31,127)
计组ASCII码2.3
数字编码:高四位全部相同,低四位的值对应相应的阿拉伯数字。
大写字母编码:前三个都是010,后五个分别对应1~26的二进制编码
小写字母编码:前三个都是011,后五个分别对应1~26的二进制编码

二、汉字的表示和编码
1、GB2312-80:汉字+各种符号共7445个
2、区位码:94个区,每区94个位置(两个字节,一个字节是区码,一个字节是位码)
3、输入:输入编码->国标码
4、输出:汉字字形编码->国标码

三、字符串
1、某计算机按字节编址means每个地址对应1B。
2、很多语言中,‘\0’作为字符串结尾标志。

计组知识回顾2.3

奇偶校验码

计组知识总览2.4

一、校验原理
1、由若干位代码组成的一个字叫码字。
2、将两个码字逐位进行对比,具有不同的位的个数称为两个码字间的距离。(码距d)
3、一种编码方案可能有若干个合法码字,各合法码字间的最小距离称为“码距”。
4、当d = 1时,无检错能力;当d = 2时,有检错能力;当d>=3时,若设计合理,可能具有检错、纠错能力。

二、奇偶校验
1、奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数。
2、偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数。
3、偶校验的硬件实现:各信息进行异或(模2加)运算,得到的结果即为偶校验位。接收方进行偶校验(所有位进行异或,若结果位1说明出错)。
4、仅能检测出奇数位错误,无纠错能力。
计组知识回顾2.4

海明校验码

计组知识总览2.5

一、基本思想
1、海明码设计思路:将信息位分组进行偶校验->多个校验位->多个校验位能携带多种状态信息(对/错,错在哪),多个校验位标注出错位置
2、需要校验码的位数:信息位n,校验位k,信息位+校验位共n+k位
校验码可以表示2^k种情况,可能出错的情况是n+k种,还有1种对的情况,校验码能表示的情况大于出错+对的情况的总和。即2^k>=n+k+1.

二、求解步骤
1、信息位1010(D4,D3,D2,D1)
2、确定海明码的位数:2^k>=n+k+1,n = 4 -> k = 3。
3、校验位Pi放在海明位号为2^(i-1)的位置上。信息位按顺序放到其余位置。
4、校验位的值等于位置序号(自右向左由1开始编号)对应权值的位置为一的信息位的内容异或。
分组的依据是将位置序号的二进制编码拿到,以校验位序号为权值,看对应二进制位上的内容,为1则在该校验位分组内。
5、纠错就将一个分组内的信息位和校验位异或,为0则信息正确,因为本质上是偶校验。
若出错,即有一个分组和校验位异或后结果为1,那么从第三个分组到第一个分组的异或结果就是出错信息的位置序号。(注意高位和低位)
6、信息位1010(D1,D2,D3,D4)
7、位置编号为从左到右,由1开始编号。
计组海明码求解步骤2.5
8、海明码的纠错能力是1位,检错能力是2位。
9、在头部需要加上“全校验位”,对整体进行偶校验。
10、s3s2s1 = 000且全体偶校验成功 - 无错误。
s3s2s1 != 000且全体偶校验失败 - 有1位错,纠正即可。
s3s2s1 != 000且全体偶校验成功 - 有2位错,需重传
计组知识回顾2.5

循环冗余校验码

计组知识总览2.6

一、循环冗余校验码的基本思想
1、数据发送、接收方约定一个“除数”
2、K个信息位+R个校验位作为“被除数”,添加校验位后需保证除法的余数为0
3、收到数据后,进行除法检查余数是否为0
4、若余数非0说明出错,则进行重传或纠错
5、题目中会以生成多项式的形式给出除数,如:G(x) = x^3+x^2+1,对应的二进制除数为1101
6、模二减相当于进行一次异或运算。
计组循环冗余校验码信息位过长2.6
7、对于确定的生成多项式,出错位与余数是相对应的
8、K个信息位,R个校验位,若生成多项式选择得当,且2^R>=K+R+1,则CRC码可纠正1位错。实际应用中一般只用来“检错”。

二、循环冗余校验码的特点
1、可检测出所有奇数个错误
2、可检测出所有双比特的错误
3、可检测出所有小于等于校验位长度的连续错误
计组知识回顾2.6

定点数的表示

一、定点数vs浮点数
1、定点数(常规计数):小数点的位置固定
2、浮点数(科学计数法):小数点的位置不固定
计组知识总览2.7
二、无符号数
1、无符号数:整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值。
2、表示范围:8位二进制数:2^8种不同的状态
3、n位无符号数表示范围为:0~2^n-1
4、通常只有无符号整数,而没有无符号小数。
三、有符号数的定点表示
计组有符号数的定点表示2.7
四、原码
1、原码:用尾数表示真值的绝对值,符号位“0/1”对应“正/负”。
2、若机器字长为n+1,则尾数占n位。
3、19D常写为[x] = 1,0010011。(用一个逗号隔开符号位和数值位)
4、-0.75D常写为[x] = 1.1100000。(小数点前面为符号位,不表示具体数值)
5、若机器字长n+1位,原码整数的表示范围:-(2^n-1)<=x<=2^n-1(关于原点对称)
6、真值0有+0和-0两种形式。故总共可以表示2^(n+1)-1个数。
7、若机器字长n+1位,原码小数的表示范围:-(1-2^(-n))<=x<=1-2^(-n)(关于原点对称)最大的情况小数数值位都为1.
8、原码小数中真值0有+0和-0两种形式。
五、反码
1、符号位为0,则反码与原码相同。符号位为1,则原码数值位全部取反就是反码。
2、若机器字长n+1位,反码整数的表示范围:-(2^n-1)<=x<=2^n-1(关于原点对称)
3、反码整数真值0有+0和-0两种形式
4、若机器字长n+1位,反码小数的表示范围:-(1-2^(-n))<=x<=1-2^(-n)(关于原点对称)
5、反码小数真值0有+0和-0两种形式。
6、反码只是原码转变为补码的一个中间状态,实际中并没有什么用。
六、补码
1、补码:正数的补码 = 原码;负数的补码 = 反码末位+1
2、补码的真值0只有一种表示形式。
3、定点整数补码[x]补 = 1,0000000表示x = -2^7.
4、若机器字长n+1位,补码整数的表示范围:-2^n<=x<=2^n-1(比原码多表示一个-2^n)
5、定点小数补码[x]补 = 1.0000000表示x = -1.
6、若机器字长n+1位,补码小数的表示范围:-1<=x<=1-2^(-n)(比原码多表示一个-1)
7、原码和补码的相互转换,各位取反,末位加一。
8、技巧:由x的补码快速求-x的补码的方法:符号位、数值位全部取反,末位+1.
七、移码
1、移码:补码的基础上将符号位取反。注意:移码只能用于表示整数。
2、补码的真值0只有一种表示形式,因此移码的真值0也只有一种表示形式。
3、若机器字长n+1位,移码整数的表示范围:-2^n<=x<=2^n-1(与补码相同)
4、移码表示的整数很方便对比大小

计组知识回顾2.7
1、定点整数小数点位置隐含在数值部分的末尾,定点小数小数点的位置隐含在数值部分的开头。

原码补码移码的作用

一、加减运算
1、使用原码运算:加法—用加法器完成;减法—用减法器完成。
2、用加法代替减法,模运算。
3、带余数法—设$x,m\in Z,m>0$则存在唯一确定的整数q和r,使得:

4、(mod 12)把所有整数分为12类(余数为0~11)mod 12余数相同的数,都是同一类,都是等价的
5、即10+(-3)、10+9、10+21…在(mod 12)的条件下效果相同
6、$\left\lvert -3\right\rvert + \left\lvert 9\right\rvert = 12$,即二者绝对值之和=模,则-3和9互为补数
7、在(mod m)的条件下,若额能找到负数的补数,就可以用正数的加法来等价替代减法。
模-a的绝对值 = a的补数
8、若计算机的字长为8 bit,则在数值计算过程中,天然的完成了mod$2^8$运算。则我们可以通过使用$2^8-a的绝对值 = a的补数$来将减法运算转换成加法运算。
9、任何运算结果在($mod 2^8$)后只保留最低8位。
10、补码—让减法操作变为加法操作,节省硬件成本。
11、补码的作用:使用补码可将减法操作转变为等价的加法,ALU中无需集成减法器。执行加法操作时,符号位一起参与运算。
12、移码表示的整数很方便对比大小。

移位运算

计组知识总览2.8
计组知识总览2.8.1
一、算数移位
1、移位:通过改变各个数码位和小数点的相对位置,从而改变各数码位的位权。可用移位运算实现乘法、除法。
2、原码的算术运算—符号位保持不变,仅对数值位进行移位。
计组原码的算数移位2.8
3、右移:高位补0,低位舍弃。若舍弃的位=0,则相当于➗2;若舍弃的位$\neq 0$,则会丢失精度。
4、左移:低位补0,高位舍弃。若舍弃的位=0,则相当于×2;若舍弃的位$\neq 0$,则会出现严重误差。
5、定点小数与定点整数同理,不再赘述。
6、反码的算数移位—正数的反码与原码相同,因此对正数反码的移位运算也和原码相同。
右移:高位补0,低位舍弃。
左移:低位补0,高位舍弃。
7、反码的算数移位—负数的反码数值位与原码相反,因此负数反码的移位运算规则如下:
右移:高位补1,低位舍弃。
左移:低位补1,高位舍弃。
8、补码的算数移位—正数的补码与原码相同,因此对正数补码的移位运算也和原码相同。
右移:高位补0,低位舍弃。
左移:低位补0,高位舍弃。
9、补码的算数移位—负数补码=反码末位+1.在负数原码中,从右向左数第一个1及其右边的0不变,其余位全部取反。
右移:高位补1,低位舍弃。
左移:低位补0,高位舍弃。
计组算数移位2.8
二、逻辑移位
1、逻辑右移:高位补0,低位舍弃。
逻辑左移:低位补0,高位舍弃。
2、可以把逻辑移位看作是对“无符号数”的算数移位。
三、循环移位
1、循环左移:把最高位拿下来放在最低位的位置上。
2、进位位:为了实现结果超过8bit的数的加法,计算机中会设置专门用来保存进位数据的位来确定低位的运算是否产生了进位。
带进位位的循环左移:原本数值位置的最高位放在了进位位的位置,而进位位的数据被放在了数据的最低位。
3、使用循环移位方法实现大端存储和小端存储的转换。
计组知识回顾2.8
注意这个框图中关于反码的算数移位表述有问题。

加减运算&溢出判断

计组知识总览2.9
一、原码的加减运算
1、加法器直接对原码进行加法运算,可能出错。
2、原码的加法运算
正数+正数->绝对值做加法,结果为正。(可能会溢出)
负数+负数->绝对值做加法,结果为负。(可能会溢出)
正数+负数->绝对值大的减绝对值小的,符号同绝对值大的数。
负数+正数->绝对值大的减绝对值小的,符号同绝对值大的数。
3、原码的减法运算,“减数”符号取反,转变为加法:
正数-负数->正数+正数
负数-正数->负数+负数
正数-正数->正数+负数
负数+正数->负数-负数
二、补码的加减运算
1、对于补码来说,无论加法还是减法,最后都会转变成加法,由加法器实现运算,符号位也参与运算。
2、$[-B]_补 = [[B]_补]_补$
三、溢出判断
计组溢出判断2.9
1、只有“正数+正数”才会上溢—正+正 = 负
只有“负数+负数”才会下溢—负+负 = 正
2、溢出判断方法一:采用一位符号位
设A(加数一)的符号为$A_s$,B(加数二)的符号为$B_s$,运算结果的符号为$S_s$,则溢出逻辑表达式为
若V = 0,表示无溢出;若V = 1,表示有溢出。
上式是一个逻辑与或表达式。含有与、或、非三种运算。
V的表达式第一项表示当“$A_s$为1且$B_s$为1且$S_s$为0”时会溢出;
第二项当“$A_s$为0且$B_s$为0且$S_s$为1”时会溢出。
3、溢出判断方法二:采用一位符号位,根据数据位进位情况判断溢出。
计组溢出判断二2.9
若$C_s$与$C_1$同时有向高位的进位,则不会溢出,比如加法(-3)+(-3) = (-6)用补码表示为110+110 = 100,虽然同时有进位,但是结果不会溢出。
4、溢出判断方法三:采用双符号位
正数符号为00,负数符号为11。
双符号位中从左往右数第一位表示应该得到的符号位,第二位表示食记得到的符号位。
符号位为01表示发生了上溢,符号位为10表示发生了下溢。
双符号位补码又称:模4补码(两位);单符号位补码又称:模2补码(一位)。
实际存储时只会存储1个符号位,运算时会复制一个符号位。
四、符号扩展
1、int->long,短数据->长数据。多出来的那些位的填补方法。
2、Eg:8位->16位
正整数(原、反、补码表示都一样)在符号位和数值位之间添上8个0。
负整数:
原码:在符号位和数值位之间添上8个0。
反码:在符号位和数值位之间添上8个1。
补码:在符号位和数值位之间添上8个1。(和原码相反)
定点整数的符号扩展:在原符号位和数值位中间添加新位,正数都添0;负数原码添0,负数反、补码添1。
3、正小数(原、反、补码的表示都一样)在尾部添加八个0。
负小数:
原码:在尾部添加八个0。
反码:在尾部添加八个1。
补码:在尾部添加八个0。(补码化成原码时,从右往左看,第一个1及其右边的0不变,因此应该在最右边加上0原来的数的大小才不会变化)
定点小数的符号扩展:在原符号位和数值位后面添加新位,正数都添0;负数原、补码添0,负数反码添1。
计组知识回顾2.9

定点数原码乘法运算

计组知识总览2.10
一、原码一位乘法
计组原码一位乘法一2.10
计组运算器的基本组成2.10
计组运算器的基本组成二2.10
1、在正式进行乘法之前,ACC置0。
2、乘数从最低位开始依次为当前参与乘法的一个位。若当前位=1,则ACC加上被乘数;若当前位=0,则ACC加上0。
3、将ACC和MQ内数据逻辑右移。高位补0。(每加一次就要逻辑右移)
4、机器字长n+1位(含一位符号位),在进行原码乘法时先加法再移位,只重复n次就够了,乘数的符号位不用参与运算。定点小数的小数点隐含在符号位后面的位置,也就是说虽然存进来的乘数是n+1位,但是由于取了绝对值的原因,第一位的符号位无论如何都是0。
5、符号位单独处理:通过异或结果修改符号位。
二、原码一位乘法(手算模拟)
1、乘数的符号位不参与运算,可以省略。
2、原码一位乘可以只用单符号位。
3、答题时最终结果最好写为原码机器数。
4、原码一位乘法:
机器字长n+1,数值部分占n位。
符号位通过异或确定;数值部分通过被乘数和乘数绝对值的n轮加法、移位完成。
根据当前乘数中参与运算的位确定(ACC)加什么。若当前运算位=1,则(ACC)+$[\left\lvert x \right\rvert]_原$,若=0,则(ACC)+0。
每轮加法后ACC、MQ的内容统一逻辑右移。

定点数补码乘法运算

一、补码一位乘法
计组补码一位乘法一2.11
1、MQ为乘商寄存器。
计组补码一位乘法二2.11
2、由于MQ中有辅助位,所以乘数只能是单符号位的补码,而被乘数和乘积高位(ACC)都采用双符号位补码运算。
二、手算模拟补码一位乘法
1、补码的算数右移:符号位不动,数值位右移,正数右移补0,负数右移补1(符号位是啥就补啥)
与算数右移相对应的是逻辑右移,逻辑右移的规则很简单,只要将二进制数整体右移,左边补0即可。
2、多进行一次加法运算,用辅助位减去乘数的符号位,此次加法之后不进行算数右移。
3、计算结果为两个机器字长位,也就是ACC中的高位拼接上MQ中除了乘数之外的数据。

定点数原码除法运算

计组知识总览2.12
一、手算除法(十进制)
1、规律:忽略小数点,每确定一位商,进行一次减法,得到4位余数,在余数末尾补0,再确定下一位商。确定5位商即可停止(机器字长为5位)。
二、原码除法:恢复余数法
计组原码除法恢复余数法一2.12
计组原码除法恢复余数法二2.12
1、每次上完商之后要逻辑左移。(将二进制数整体右移,左边补0即可)
2、若最后一步商余数为负,也需要恢复余数并商0.
计组原码除法恢复余数法三2.12
3、优化:若余数为负,则可直接商0,并让余数左移1位再加上|余数|,直接得到下一步的余数。
三、原码除法:加减交替法
计组原码除法加减交替法一2.12
计组原码除法加减交替法二2.12
1、除之前才移位,不除不移位。

定点数补码除法运算

计组补码除法加减交替法一2.13
最终,$[x/y]_补 = 1.0101$,$余0.0111x2^{-4}$(左移了四次)
计组除法运算总结回顾2.13

C语言中的强制类型转换

一、强制类型转换
1、C语言中定点整数是用“补码”存储的。
2、无符号数与有符号数:不改变数据内容,改变解释方式。
3、长整数变短整数:高位截断,保留低位。
4、短整数变长整数:符号扩展。(负数在符号位前面全添一,正数则添零)

数据的存储和排列

一、大小端模式
1、四字节int型变量:01 23 45 67H
2、最高有效字节(MSB):01;最低有效字节(LSB):67。
3、把该十六进制的数翻译为十进制:19088743 D。
4、把该十六进制的数翻译为二进制:0000 0001 0010 0011 0100 0101 0110 0111 B。
5、多字节数据在内存里一定是占连续的几个字节。
计组大小端模式2.14
大端方式:便于人类阅读(低地址编号存高位)
小端模式:便于机器处理(低地址编号存低位)
二、边界对齐
计组边界对齐2.14
1、按字节寻址是指能在半字或字中找到对应字节的编号。
2、按半字寻址是指能在字或字节中找到对应半字的编号并以半字为单位访问它。
3、已知字地址,在上述情况中,字节地址等于将字地址左移两位。
4、已知半字地址,在上述情况中,字节地址等于将半字地址左移一位。
5、每次访存只能读/写1个字,意味着访存时不能跨行读取。
6、当读取位于边界不对齐的第一行末端和第二行起始端的那个半字时,需要进行两次访存,然后才能拼接成为一个半字。
7、边界对齐方式:访问一个字/半字都只需要一次访存。(空间换时间的方式)。
8、边界不对齐方式:访问一个字/半字可能要两次访存。(时间换空间的方式)。

浮点数的表示

计组知识总览2.15
一、定点数的局限性
1、定点数可表示的数据范围有限,但我们不能无限制地增长数据的长度。
二、浮点数的表示
计组理解浮点数2.15
1、阶码反映数值大小,尾数反映精度。
2、阶码:常用补码或移码表示的定点整数。
3、尾数:常用原码或补码表示的定点小数。
4、浮点数的真值:$N = r^ExM$,r为阶码的底,通常为2,E为阶码,M为尾数。
5、阶码E反应浮点数的表示范围及小数点的实际位置;尾数M的数值部分的位数n反应浮点数的精度。
6、尾数给出一个小数,阶码指明了小数点要向前/向后移动几位。
三、浮点数尾数的规格化
1、规格化浮点数:规定尾数的最高数值位必须是一个有效值。
1、左规:当浮点数运算的结果为非规格化时要进行规格化处理,将尾数算数左移1位(带符号移位),阶码减1.直到尾数最高位是有效位。
2、右规:当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,将尾数算数右移一位,阶码加1.
3、采用“双符号位”,当溢出发生时,可以挽救。更高的符号位是正确的符号位。
四、规格化浮点数的特点
1、用原码表示的尾数进行规格化:规格化的原码尾数,最高数值位一定是1。
正数为0.1xxx…x的形式,其最大值表示为0.11…1;最小值表示为0.10…0。尾数表示的范围为$\frac{1}{2} \leqslant M \leqslant (1-2^{-n})$。
负数为1.1xxx…x的形式,其最大值表示为1.10…0;最小值表示为1.11…1。尾数表示的范围为$-(1-2^{-n}) \leqslant M \leqslant -\frac{1}{2}$。
2、用补码表示的尾数进行规格化:规格化的补码尾数,符号位与最高数值位一定相反。
正数为0.1xxx…x的形式,其最大值表示为0.11…1;最小值表示为0.10…0。尾数表示的范围为$\frac{1}{2} \leqslant M \leqslant (1-2^{-n})$。
负数为1.0xxx…x的形式,其最大值表示为1.00…0;最小值表示为1.01…1。尾数表示的范围为$-1 \leqslant M \leqslant -(\frac{1}{2}+2^{-n})$
计组知识回顾2.15

浮点数标准 IEEE 754

一、移码
1、偏置值一般取$2^{n-1}$,此时移码=补码符号位取反。
2、模$2^8$减法运算(即结果只能是八位),当被减数小于减数的时候,可以给被减数加上$2^8$。
3、真值-128对应移码11111111;真值-127对应移码00000000。
二、IEEE 754标准
计组IEEE754标准2.16
1、注意float类型的数阶码的偏置值为127($2^{n-1}-1$)而不是128。由于11111111(-128)和00000000(-127)有特殊用途,所以阶码真值的正常范围为-126到127。
2、注意位数部分是用原码表示的。隐藏表示最高位1,表示位数1.M。
3、阶码真值 = 移码(十进制,对应无符号数的值)-偏移量(十进制)。
4、规格化的短浮点数的真值为:$(-1)^sx1.Mx2^{E-127}$。
5、规格化长浮点数的真值为:$(-1)^sx1.Mx2^{E-1023}$。
6、最小绝对值:尾数全为0,阶码真值最小-126,对应移码机器数00000001,此时整体的真值为$(1.0)_2x2^{-126}$。
只有$1 \leqslant E(对应的无符号数) $\leqslant 254$时,$真值 = (-1)^sx1.Mx2^{E-127}$。
1)若要表示的数绝对值比最小值还要小,则当阶码E全为0,尾数M不全为0时,表示非规格化小数 $±(0.xx…x)_2x2^{-126}$。这里要注意虽然移码为全零对应的是-127的情况,但是在这个规定里我们将移码真值固定视为-126。
2)当阶码E全为0,尾数M全为0时,表示真值 ±0。
7、最大绝对值:尾数为全1,阶码真值最大127,对应移码机器数11111110,此时整体的真值为$(1.111…11)_2x2^{127}$。
1)当阶码E全为1,尾数M全为0时,表示无穷大 ±∞
2)当阶码E全为1,尾数M不全为0时,表示非数值”NaN“(Not a Number)
计组知识回顾2.16

浮点数 加减运算 强制类型转换

计组知识总览2.17
一、浮点数的加减运算
1、浮点数加减运算步骤:
1)对阶:小阶数向大阶数对齐,这是因为在计算机内部,尾数是定点小数,小阶向大阶靠齐,结果是个定点小数,计算机方便对其进行处理。
2)尾数加减
3)规格化
4)舍入
5)判溢出:阶码的溢出才是真正的溢出,尾数溢出未必会导致整体溢出
2、注意隐藏小数点左边的1是IEEE 754标准,如果题目中没有说尾数隐藏1或者按照IEEE 754标准来表示,则尾数使用定点小数的方式参与计算。
二、浮点数的加减运算
1、“0”舍“1”入法:类似于十进制数运算中的“四舍五入”法,即在尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1.这样做可能会使尾数又溢出,此时需再做一次右归。
2、恒置“1”法:尾数右移时,不论丢掉的最高数值位是“1”还是“0”,都使右移后的尾数末位恒置“1”.这种方法同样有使尾数变大和变小的两种可能。
3、有的计算机可能会把浮点数的尾数部分单独拆出去计算(23+1bit->32bit),算完了经过舍入(32bit->23+1bit)再拼回浮点数。
三、强制类型转换
计组强制类型转换2.17
1、图中所列出的转换,范围、精度从小到大,转换过程没有损失。
2、32位:
int:表示整数,范围$-2^{31}~2^{31}-1$,有效数字32位。
float:表示整数及小数,范围 ±$2^{-126}~2^{127}x(2-2^{-23})$,有效数字23+1=24位。
int->float:可能损失精度;
float->int:可能溢出及损失精度(比如1.05变成int,小数部分会被截断)
计组知识回顾2.17

算术逻辑单元 电路基本原理&加法器设计

计组知识总览2.18
一、最基本的逻辑运算
1、优先级:与>或(类比乘法运算优先级高于加法)
二、串行加法器
1、串行加法器:只有一个全加器,数据逐位串行送入加法器中进行运算。进位触发器用来寄存进位信号,以便参与下一次运算。
2、如果操作数长n位,加法就要分n次进行,每次产生一位和,并且串行逐位地送回寄存器。
3、串行进位的并行加法器:把n个全加器串接起来,就可进行两个n位数的相加。
4、串行进位又称为行波进位,每一级进位直接依赖于前一级的进位,即进位信号是逐级形成的。
计组知识回顾2.18

算术逻辑单元 加法器、ALU的改进

一、并行进位加法器的优化
1、并行进位的并行加法器:各级进位信号同时形成,又称为先行进位、同时进位。