【冯诺依曼计算机体系】
计算机由运算器、存储器、控制器、输入设备和输出设备五大部件组成指令和数据以同等地位保存于存储器内,并可按地址访问存储器指令和数据均用二进制代码表示指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置指令在存储器内按顺序存放,通常指令都是顺序执行的,在特定条件下,可根据运算结果或设定的条件改变执行顺序机器以运算器为中心,输入/输出设备与存储器之间的数据传送通过运算器完成△☼▽
分析:C,数据获取方式由指令给出,但是数据存储位置不一定,如果是立即寻址则数据在指令中,其余寻址方式都只是给出地址
△☼▽
分析:D
【在冯诺依曼计算机体系中,指令和数据的区分】
虽然指令和数据都是以二进制形式存放在存储器中,但 CPU 可以根据指令周期的不同阶段来区分是指令还是数据,通常在取指阶段取出的是指令,在执行阶段取出的是数据
另外,要注意的一点是,不可能根据指令操作码的译码结果区分数据和指令,因为 CPU 只有在确定取出的是指令之后,才会将其操作码送去译码
【地址线和寻址范围】
分析:地址线的位数对应的都是按字节寻址,如果是按字寻址,则需要拿出地址线来做字内字节寻址 假设现在按字节寻址,20 根地址线可以寻址大范围为 220 = 1M;如果按字寻址,每个字有 4B,于是要拿地址线中的两根来做字内字节寻址,这样还剩下 18 根地址线寻址,即按字寻址的寻址范围为 218 = 256K
【计算机性能指标】
MIPS: 每秒执行多少百万条指令,适用于衡量标量机的性能
CPI: 平均每条指令的时钟周期,ICP 是 CPI 的倒数
MFLOPS: 每秒执行多少百万条浮点数运算,用来描述浮点数运算速度,适用于衡量向量机的性能
一个 EFLOPS 等于每秒一百京(=10^18)次的浮点运算 一个 ZFLOPS 等于每秒十万京(=10^21)次的浮点运算
【执行时间和 CPI 的关系】
一条特定指令的 CPI 是一个确定的值,而某个程序的 CPI 是一个 平均值。一个程序的执行时间取决于该程序所包含的指令数、CPI 和时钟周期。在指令数和时钟周期一定的情况下,CPI 越大,执行时间越长。同理,在指令数和时钟周期一定的情况下,时钟周期越长,执行时间越长
△☼▽
分析:A,系统结构、指令集、计算机组织都会影响到 CPI,时钟频率不会影响到 CPI,但可以加快指令的执行速度
【硬件能直接执行的语言】
硬件能直接执行的只能是机器语言(二进制编码),汇编语言是为了增强机器语言的可读性和记忆性的语言,经过汇编之后才能被执行
【翻译程序】
翻译程序是指把高级源程序转换成机器语言程序(目标代码)的软件。翻译程序有两种:
一种是编译程序,它将高级语言源程序一次全部翻译成目标程序,每次执行程序时,只要执行目标程序,因此,只要源程序不变,就无需重新编译
另一种是解释程序,它将源程序的一条语句翻译成对应的机器目标代码,并立即执行,然后翻译下一条源程序语句并执行,直至所有源程序语句全部被翻译并执行完。所以,解释程序的执行过程是翻译一句执行一句,并且不会生成目标程序
【8421 码】
如.
分析:C,在 8421 码中,1010 ~ 1111 是不能使用的
分析:B,先转成十进制,算完再转回二进制 8421 码,A = 38,B = 23,A+B = 61
分析:D Ⅱ. 8421 码是十进制数的编码,故错误 Ⅲ. 正数的原码、反码和补码都是一样的,故错误 Ⅳ.因为是规格化浮点数,所以 M1、M2 有相同的形式,且都为正数,又有 N1 阶码至少比 N2 阶码大 1,那么 N1 一定大于 N2 ,故正确
【码距】
通常某种编码都有许多码字构成,任意两个合法码字之间最少变化的二进制位称为数据校验码的码距
对于码距不小于 2 的数据校验码开始具有检错的能力码距越大,检错、纠错的能力就越强,而且检错能力总是大于等于纠错能力如.
分析:D Ⅰ. 码距大于等于 2 Ⅲ. 仅靠增加奇偶检验位的位数的是不能提高正确性的,还要考虑码距 Ⅳ. 采用奇偶校验仅可以检测出一位数据出错,不知道是哪位出错,也不能加以纠正
【奇偶校验码】
奇校验码:整个校验码(有效信息位和检验位)中 1 的个数为奇数 偶校验码:整个校验码(有效信息位和检验位)中 1 的个数为偶数
如.
分析:C,一位奇偶校验码只能发现奇数位错误,无法发现偶数位错误,且不能纠正错误
【海明码】
如.
分析:C,设校验位数为 k k k,应满足关系式 2 k ⩾ 8 + k + 1 2^k\geqslant8+k+1 2k⩾8+k+1
分析:A,C CRC很好算出便不再赘述 采用海明码时,海明码 P13 ~ P1: 0 1010 0 101 1 1 11(校验码 i i i 在编码中的位置为 2 i − 1 2^{i-1} 2i−1) P1 = P3⊕P5⊕P7⊕P9 = 1 P2 = P3⊕P6⊕P7⊕P10⊕P11 = 1 P4 = P5⊕P6⊕P7⊕P12 = 1 P8 = P9⊕P10⊕P11⊕P12 = 0 P13 为全校验位,因 P12 ~ P1 中 1 的个数为偶数个,故
【原码、补码、反码的转换】
当真值为正数时,原码、补码和反码的表示形式均相同,即符号位用 0 表示,数值部分与真值相同
当真值是为负数时,原码、补码和反码的表示形式不同,但其符号位都用 1 表示,而数值部分有如下的关系:补码是原码的每位求反加 1,反码是原码的每位求反。需要注意的是,上面所谓的每位求反均不包括符号位,只是对数值部分进行求反,且原码除了符号位为 1,其数值部分仍然与真值相同
分析:C,[-0.1101]补 = 1.0011,[-0.1101]反 = 1.0010,注意 D 选项,移码通常用于表示阶码,不用来表示定点小数
【补码】
1)求 − x -x −x 的补码
已知 [ x ] 补 [x]_补 [x]补,求 [ − x ] 补 [-x]_补 [−x]补:不论真值是正是负,只需将 [ x ] 补 [x]_补 [x]补 连同符号位在内每位取反,末位加 1 1 1,即可得到 [ − x ] 补 [-x]_补 [−x]补
2)补码的优点
补码的设计是可以满足 x + ( − x ) = 0 x+(-x)=0 x+(−x)=0 0 0 0 的补码只有一种,从数学的角度出发,如果在一个运算规则中,如果零元不唯一,那么就称这种运算是不可逆的。故从这点出发,计算机就不应该选取原码和反码来表示数采用补码运算,符号位作为代码可以与数位一起参加运算,无需单独设置符号位处理线路,而原码需要单独的符号位处理线路采用补码运算后,补码可以将正数加负数转化为正数加正数,又可以将减法转化为加法运算,这样只是加法器就可以了采用补码可以方便的解决补码数的扩充问题3)若干与补码相关的习题
分析:B, 无论机器字长多少位,-1 的补码定点整数永远全为 1;补码定点小数的最小负数 -1 的首位为 1,后面全 0
分析:D,C 语言的数据在内存中为补码形式,x = 0000 007FH,y = FFF7H,强制转换为 int 之后为 FFFF FFF7H,x+y = 127-9 无溢出,可以直接将两个机器数相加,即 0000 007FFH + FFFF FFF7H
分析:B,r1 = -2,r2 = -14,r3 = -112,r4 = -8,又 8 位补码的取值范围为 -128 ~ 127,显然 r2×r3 超过了 8 位补码的范围
分析:A,N 位二进制小数可以表示的个数为 1+20+21+…+2N-1 = 2N,而十进制小数能表示的数的个数为 10N,比值为 (0.2)N,这也解释了为什么在计算机运算中会出现误差情况的原因,它表明仅有 (0.2)N 概率的十进制小数可以精确地表示到二进制
分析:D,取 [-1]补 = 1.0000,排除 A、B、C
分析:C,取 [-8]补 = 1,111000,排除 A、D;再取 [-32]补 = 1,100000,排除 B
分析:C,取 [-32]补 = 1,00000,这个是特殊的那个补码,刚好是比原码、反码多出来的那一个负数
分析:C,取 [-1]补 = 1.000,排除 A、B;再取 [-0.75]补 = 1.010,排除 D
分析:D,当 x 为 0 或正数时,满足题中关系式,故排除 B;当 x 为负数时,-x 为正数,-x* 为负数,补码表示唯一,显然二者不等
分析:B,因为是二进制补码,转换成原码先减一再取反,要求表示最小整数,即最高位为 1,表示负数,数值位尽可能的大,于是补码数值部分的 1 应该尽可能占据低位,于是 [x]补 = 1 0000011,[x]原 = 1 1111101 = -125
【移码】
移码就是在真值 X X X 上加一个常数(偏置值),通常这个常数取 2 n 2^n 2n,相当于 X X X 在数轴上向正方向偏移了若干单位,这就是移码一词的由来。
移码定义为
[ x ] 移 = 2 n + x ( 其 中 机 器 字 长 为 n + 1 ) [x]_移=2^n+x(其中机器字长为\ n+1) [x]移=2n+x(其中机器字长为 n+1)
分析:B,以机器字长 5 位为例,[0]补 = 00000,[0]移 = 24+0 = 10000,显然 [0]补 ≠ [0]移,但需要注意的是补码和移码中 0 的表示是唯一的
分析:D,+127 的原码、补码、反码都一样,即 0111 1111,又知同一数值的移码和补码除最高位相反以外,其他各位相同,故 [+127]移 = 1111 1111
【0 的表示】
0 的原码和反码都有两种,补码只有唯一的一种
进一步,由于 0 的补码形式是唯一的,既然移码是补码的符号位取反,因此可以得出 0 的移码表示也是唯一的
详细如下表给出: 【移位】
1)算术移位
上述所有算术移位仅操作数值部分,均不动符号位
另外注意: 如果采用双符号位表示数,则最高符号位永远是真正的符号位,因此在算术移位时只有最高符号位保留不变,低符号位要参与移位,以 11.110011(补码表示) 为例,算术左移一位的结果为 11.10010,算术右移一位的结果为 11.111001
如.
分析:D Ⅰ. 正确,负数的反码除符号位外其他位于负数的原码相反,如 5 位反码 10010 表示 -13,右移 1 位变成 11001,为 -6,影响精度;左移 1 位变成 10101,为 -10,数据丢失 Ⅱ. 正确,补码表示时,正数的符号位为 0,左移最高位为 0 时,数据不会丢失,负数的符号位为 1,左移最高位为 1 时,数据不会丢失 Ⅲ. 正确
2)逻辑移位
逻辑移位规则:逻辑左移时,高位移丢,低位补 0;逻辑右移时,低位移丢,高位添 0
如.
分析:B,理论如上所述
3)循环移位 如.
分析:C,对应上面的 ( c ) 图
【关于数据类型转换的总结】
1)不涉及浮点数
signed 转化为等长的 unsigned 时,符号位成为数据的一部分long 类型转化为 short 类型,只将低 16 位传过去短字长整数到长字长整数的转换,高位部分扩展为原数字的符号位char 类型为 8 位 ASCII 码整数,其转换为 int 时,在高位部分补 0 即可如.
分析:C,看下就行
分析:A,16 位补码最大表示范围为 216-1 = 65535,故 usi 的机器代码全 1,全 1 的补码其真值为 -1 分析:B,16 位的 unsigned short 转为 32 位的 unsigned int,因为都是无符号整数,高位填 0,16 位无符号整数所能表示的最大值为 65535,故 x 的十六进制表示为 FFFFH - 0005H = FFFAH,故 y 的十六进制表示为 0000 FFFAH
分析:D,short 占 16 位,[-32767]补 = 1000 0000 0000 0001,等长 signed 转为 unsigned,符号位看书数据一部分,32768+1 = 32769
2)涉及浮点数
强制类型转换的顺序为 int → float → double:
若将 float 转换成 int,小数位部分会被舍去有效位数的问题:float 仅有 24 位有效位数(相当于 7 位十进制有效数),double 有 53 位有效位数(相当于 17 位十进制有效数),int 有 31 位有效数位(最大数位 231-1,即 011…1)。于是,从 int 转为 float,虽不发生溢出,但由于位数位数的关系,可能会有数据舍入,而 int 转为 double 则能保留精度double 的精度和范围都比 float 大,float 转换为 double 不会有损失如.
分析:(1)是,int 转 double 会保留精度;(2)不是,float 转 int 时有可能会丢失小数部分;(3)是,float 转 double 不会发生损失;(4)不是,double 转 float 会有进度损失
分析:B,Ⅰ. 785 < 1024,仅有不过 10 位的有效位数,故正确;Ⅱ. 会丢书 float 的小数位部分,故错误;Ⅲ. float 转 double 不会有损失,故正确;Ⅳ. 乍看是没啥问题,但是浮点数运算时要对阶,对阶后 f 的位数有效位被舍去而变为 0,因此 d+f 仍然为 d,再减去 d 后结果为 0, 故错误
【无符号数】
1)unsigned int/int
如.
分析:会出现死循环,因为 unsigned int 为无符号整数,n = 0,n-1 的机器数全为 1,值为 232-1,为 unsigned int 能表示的最大数,条件 i <= n-1 永真,故出现死循环;若改为 int 型变量,n-1 = -1,i =0,i <= n-1 为带符号整数比较,故不成立,退出循环
分析: (1)x 的真值为 231+4,乘 2 和除 2 相当于无符号数的左移和右移,于是 x/2 的真值为 230+2,其机器码为 4000 0002,2x 的真值为 232+8,发生溢出,存放在 R1 中的机器码为 0000 0008H (2)1000 0000 0000 0000 0000 0000 0000 0100,0100 - 1 = 0011,取反结果为 1111 1111 1111 1111 1111 1111 1111 1100,其真值为 -(231-1-3) = -(231-4),乘 2 和除 2 相当于补码的左移和右移,x/2 的真值为 -(230-2),其机器码为 C000 0002H,2x 的真值为 -(232-8),发生溢出,机器码为 8000 0008H
2)无符号数的比较
cmp 指令实现两无符号数比较的功能进行的是减法运算
分析:n-1 的机器数为 FFFF FFFFH,i 的机器数为 0000 0000H,在补码运算中执行 “ 0减 FFFF FFFFH ” 的操作,-(n-1) 的补码为 0000 0001H,0000 0000H+0000 0001H = 0000 0001H,此时进位输出为 0,减法运算时的借位标志 CF = C ⊕ 1(解释一下这里为什么要异或上 1 ?进位就相当于没有借位,而没有进位就相当于借位了,根据题中两个无符号数的减法运算 0-(0-1) 借位就发生在这一步)
3)用于表示主存地址
如.
分析:D,主存地址都是都是正数,因此不需要符号位
【原码一位乘】 【补码一位乘(booth)】 【乘法运算总结】
如.
分析:D,补码一位乘法运算过程中一共右移 N 次,加上原先的 N 位,一共是 2N 位数值位,因成绩结果需加上符号位,因此共 2N+1 位
【原码不恢复余数除法】
如.
分析:D
【补码不恢复余数除法】 补码不恢复除法中,被除数(余数)和除数的比较规则总结如下:
如.
分析:B,理论如上
【除法运算总结】 【各编码的表示范围】
下面的所有讨论,机器字长都为 n+1
两点解释:
由于 0 的原码和反码都有两种,补码只有唯一一种,所以对于定点整数补码可以比原码和反码多表示一个负数,即首位是 1 后面全是 0, 即 (-2)n对于定点小数补码可以比原码和反码多表示一个数,即 -1如.
分析:D,5 位 2 二进制定点小数,用补码表示时,最小负数的真值为 1,补码表示为 1.0000
分析:B,[x]移 = 0000 0000,其真值为-27 = -128,-x = 128,但是 8 位移码的最大表示范围为 27-1 = 127,故会发生溢出
【大小端问题】
大端方式按照从最高有效字节到最低有效字节的顺序存储数据 (低字节高地址)小端方式按照从最低有效字节到最高有效字节的顺序存储数据 (高字节低地址)注意,是按字节存放的,8 位一字节,如果以 xxxxx H 表示,就是两数一翻转
如.
分析:A
分析:A,把指令部分和数据部分分开就好了
【边界对齐问题】
如.
分析:D record 占 8 字节(考虑边界对齐),record.a = 273 = 0x0000 0111,因为小端存储方式,从低字节到高字节为 0x11,0x01,0x00,0x00,所以存储结构如下所示:
【模 4 补码】
模 4 补码具有模 2 补码的全部优点且更易检查加减运算中的溢出问题。需要注意的是,存储模 4 补码仅需一个符号位,因为任何一个正确的数值,模 4 补码的两个符号位总是相同的。只有把两个模 4 补码的数送往 ALU 完成加减运算时,才把每个数的符号位的值同时送到 ALU 的双符号位中,即只在 ALU 中采用双符号位
如.
分析:B,理论如上描述
【溢出的判别方法】
1)两个数的符号位
不论是做加法,还是做减法,只要实际参加操作的两个数符号下相同,结果又与原操作数的符号不同,即认为溢出
2)双符号位
双符号位法也称模 4 补码,运算结果的两个符号位 S s 1 S s 2 S_{s1}S_{s2} Ss1Ss2 相同,表示未溢出;运算结果的两个符号位 S s 1 S s 2 S_{s1}S_{s2} Ss1Ss2 不同,表示溢出,此时最高符号位代表真正的符号
S s 1 S s 2 = 00 S_{s1}S_{s2}=00 Ss1Ss2=00:表示结果为正数,无溢出 S s 1 S s 2 = 01 S_{s1}S_{s2}=01 Ss1Ss2=01:表示结果正溢出 S s 1 S s 2 = 10 S_{s1}S_{s2}=10 Ss1Ss2=10:表示结果负溢出 S s 1 S s 2 = 11 S_{s1}S_{s2}=11 Ss1Ss2=11:表示结果为负数,无溢出
溢出逻辑判断表达式为: V = S s 1 ⨁ S s 2 V=S_{s1}\bigoplus S_{s2} V=Ss1⨁Ss2,若 V = 0 V=0 V=0,表示无溢出;若 V = 1 V=1 V=1,表示有溢出
如.
分析:B,理论如上
分析:1/16 = 2-4,11 = 1011,3 = 0011,故 x =0.1011,y = 0.0011 变形补码即模式补码,于是 [x]补 = 00.1011,[y]补 = 00.0011,00.1011 + 00.0011 = 00.1110,得 [x+y]补 = 00.1110,x+y = 0.1110,其真值为 +14/16
3)采用一位符号位根据数据位的进位情况判断溢出
若符号位的进位 C s C_s Cs 与最高位数位的进位 C 1 C_1 C1 相同,则说明没有溢出,否则表示发生溢出。 C 1 C s = 10 C_1C_s=10 C1Cs=10,表示正溢出; C 1 C s = 01 C_1C_s=01 C1Cs=01,表示负溢出。溢出的逻辑判断表达式为 V = C s ⨁ C 1 V=C_s\bigoplus C_1 V=Cs⨁C1,若 V = 0 V=0 V=0,表示无溢出;若 V = 1 V=1 V=1,表示有溢出
如.
分析:D,根据上述理论易知 D 正确
分析:B,采用一位符号来判断溢出的话,最高有效维进位和符号位进位的数据不同时发生溢出,根据上述溢出的逻辑判断表达式易知
分析:C,所有的溢出判别方法均有溢出电路,根据上述理论描述可用异或门来实现
分析: (1)(R1) = x,(R5)= z1,(R6) = z2 x = 134 = 128+6 = 1000 0110B,故 R1 中的内容为 86H,y = 246 = 255-9 = 1111 0110B,x-y = 1000 0110 - 1111 0110 = 1001 0000,故 R5 中的内容为 90H,x+y = 1000 0110 + 1111 0110 = 0111 1100,故 R6 中的内容 7CH (2)m 的机器数与 x 的机器数相同,即 1000 0110,最高位位符号位,故 m 的真值为 -122(- 111 1010),n 的真值为 -10(-000 1010),故 k1 = -122-(-10) = -112 (3)能。n 位加法器实现的是模 2n 无符号整数整数加法运算,对于无符号整数 a 和 b,a+b 可以直接用加法器实现,而 a-b 可以用 a+(b 的补数) 实现,即 a+[-b]补(mod 2n),所以 n 位无符号整数的加减运算都可以在 n 位加法器中实现。由于有符号整数用补码表示,补码加减运算为 [a+b]补 = [a]补 + [b]补(mod 2n),[a-b]补 = [a]补+[-b]补(mod 2n),所以 n 位有符号整数的加减运算都可可以在 n 位加法器中实现 (4)有符号整数加减运算的溢出判断规则:三种溢出判断方式任选其一作答。最后一条语句:m+n = -132,结果小于 8 位二进制补码所能表示的最小负数(-128),故溢出
分析: (1)[-68]补 = 1011 1100B,A 中的内容为 BCH;[-80]补 = 1011 0000B,B 中的内容为 B0H (2)x+y = 148(< -27),故发生溢出,1011 1100 + 1011 0000 = (1) 0110 1100,寄存器 C 中的内容为 6CH 溢出标志位 OF 为 1,表示溢出,说明 C 中内容不是真正结果;符号标志位 SF 为 0,表示正数(溢出标志位为 1,说明符号标志位有错);进位标志位 CF 为 1,仅便是加法器最高位有进位,对运算结果不说明什么 (3)x-y = 12,[+12]补 = 0000 1100B,D 中内容为 0CH,1011 1100 + 0101 0000 = (1) 0000 1100;OF = 0,SF = 0,CF = 1
【浮点数】
1)浮点数的表示
如.
分析: (1)27/64 = 0.011011 = 0.11011×2-1,1 111 0 110110000 (2)-27/64 = -0.11011×2-1,1 111 1 001010000
2)表示范围
① 尾数部分含有数符
如.
分析:D,尾数 8 位,补码,能表示的范围为 -1~1-2-7,阶码 4 位,补码能表示的最大整数为 24-1-1 = 7,故该浮点数所能表示的最大正数为 (1-2-7)×27
② 尾数部分不含数符
分析:A,阶码用 7 位移码表示,阶数部分的最大值为 263(27-1-1 = 63),而尾数部分用 8 位补码表示,表示范围为 -1 ~ 1-2-8,故浮点数的表示范围为 -1×263 ~ (1-2-8)×263
3)阶码、尾数对表示数的影响
如.
分析:B,在浮点数总位数不变的情况下,阶码位数越多,尾数位数越少,表示的数的范围越大,精度越差(数变稀疏)
4)基数对表示数的影响
如.
分析:B,基数越大,表示的数的范围越大,精度变低(数变稀疏) ① 基数越大,在运算中尾数右移的可能性越小,运算的精度损失越小; ② 由于基数大时发生因对阶或尾数溢出需要右移及规格化需左移的次数显著减少,因此运算速度可以提高 ③ 基数越大可表示的数的个数越多
分析:D,浮点数表示中基数的值是约定好的,因此将其隐含
分析: (1)浮点机中一旦基值确定了就不会再改变,所以基值 2 和 16 在浮点数中是隐含表示的,并不出现在浮点数中 (2)当基值为 2 时,最大正数时 0, 111 1111; 0, 11…1,真值为 2127×(1-2-23),最小非零正数为 1, 000 000; 0, 10…0,真值为 2-129(可以结合上面的表 2.9 加深理解);当基值为 16 时,同理,最大正数为 16127×(1-2-23),最小非零正数为 16-129 (3)基值越大,可表示的浮点数范围越大,故基值为 16 的浮点数表示的范围更大 (4)对阶中,需要小阶向大阶看齐,基值为 2 的浮点数尾数右移一位,阶码 +1,;基值为 16 的浮点数尾数右移 4 位,阶码 +1 规格化时,基值为 2 的浮点数尾数最高位出现 0,则需要尾数向左移一位,阶码 -1;基值为 16 的浮点数,尾数最高 4 位全为 0 时,才需要尾数向左移动,每移动 4 位,阶码 -1
【IEEE 754】
1)浮点数的表示
在 IEEE 754 中,尾数使用原码,阶码使用移码
(捎带解释一下 E 的取值范围,在 IEEE 754 中,有一个偏置值 7E,然后还要除去阶码全 0 和全 1 的情况,故短浮点数 E 的取值即为 1 ~ 254)
注意,上面表格只讨论了正数的范围
如.
分析:D,如上表格所描述 分析:A,如上表格所描述
分析:B,长浮点数,阶码 11 位,尾数 52 位,最小规格化负数为阶码取最大值为 2+1023,尾数取最大值 (2-2-52),符号位为负
2)IEEE 754 单精度浮点数转十进制数值
如.
分析:A,(f1) = 1 1001 1001 001 … (f2) = 1 0110 0001 100 … (f1) 的数符为 1,阶码为 1001 1001,尾数为 1.001 (f2) 的数符为 1,阶码为 0110 0001,尾数为 1.1 故 x,y 均为负数,|x| = 1.001×226,|y| = 1.1×2-30
分析:D,最高位为 1,补原浮都是负数,对于移码而言为正数,故移码表示的数最大,而补码为 -228,原码为 -(230+229+228),单精度浮点数的阶码为 1110 0000,尾数为 1.0,故单精度浮点数为 -1.0×297
分析: (1)阶码字段内容为 0,符号位为 0,尾数字段内容也为 0,故其表示 IEEE 754 浮点格式的 +0(用 8000 000H 表示 -0) (2)阶码字段内容为 132,尾数字段内容为 100 0000…0000,它表示一个规格化数,实际值为 1.1×25 = 11 0000 = 48 (3)阶码字段内容为 0,且尾数字段的内容不全为 0,所以它表示一个非规格化数,为无效数 (4)阶码字段内容为 1,尾数字段内容为 0,符号位为 1,所以它表示负无穷大 (阶码全 0,表示浮点数为 0 值;阶码全 1,若尾数全 0 表示无穷大,否则表示无效数字。根据符号位,可以分为 ± 0 和 ±∞)
3)十进制数值转 IEEE 754 单精度浮点数
如.
分析:C,x 转二进制为 -1000.01 = 1.00001×23,根据 IEEE 754,有 E-127 = 2,故 E = 130 = 1000 0010B,于是 单精度浮点数格式为 1 1000 0010 000 0100 0000 0000 0000 0000,即 C1040000H
分析: (1)x = -68 = -1000100 = -1.0001×26,127+6 = 133 = 1000 0101 1 1000 0101 000 1000 0000 0000 0000 0000,(A)= C2880000H y = -8.25 = -1000.01 = -1.00001×23,3+127 = 130 = 1000 0010 1 1000 0010 000 0100 0000 0000 0000 0000,(B)= C1040000H (2)对阶后,y = -0.00100001×26,尾数为原码,x、y 符号相同做加法,1.000 1000 0000 + 0.001 0000 1000 = 1.001 1000 1000,故(C)= C2988000H (3)把符号和数值邠分开,符号位取大数的符号位,数值部分按照绝对值的补码运算,即 1.000 1000 0000 + 1.110 1111 1000 = 0.111 0111 1000,故 x-y 的结果为 -0.11101111×26,左规一次,x-y = -1.1101111×25 1 1000 0100 110 1111 0000 0000 0000 0000故(D)= C26F0000H
【规格化】
1)规格化尾数
如.
分析:C
分析:B
分析:C,当浮点数为正数时,数值位前 3 位不全为 0 时,是规格化数;当浮点数为负数时,数值位前 3 位不全为 1 时,是规格化数
2)浮点数规格化的作用
为了提高浮点数的精度,其尾数必须为规格化的数(因为规格化数精度最高)
3)如何判断一个浮点数是否是规格化数
为了使浮点数能尽量多的表示有效位数,一般要求运算结果用规格化数形式表示。规格化浮点数的尾数小数点后的第一位一定是个非零数。因此,对于原码编码的尾数来说,只要看尾数的第一位是否为 1 就行;对于补码表示的尾数,只要看符号位和尾数最高位是否相反。需要注意的是,IEEE754 标准的浮点数尾数是用原码编码的
【舍入】
如.
分析:C 舍入是浮点数的概念,定点数没有舍入的概念,故Ⅰ错误 浮点数舍入的情况有两种:对阶和右规格化,故 Ⅱ Ⅲ Ⅳ 错误 舍入不一定产生误差,如 向下舍入 11.00 到 11.0 时是没有误差的,故Ⅴ正确
【浮点数溢出】
1)浮点数溢出的判断
2)浮点数运算结果可能出现的几种情况
(▽ 正下溢/负下溢)
如.
分析:A,理论如上描述
3) 可能引起溢出的操作
对阶操作不会引起阶码的上溢或下溢右规和尾数舍入都可能引起阶码上溢左规可能会引起阶码下溢尾数溢出时,可能进仅产生误差,而结果不一定溢出【浮点数的加/减运算】
1)
分析:D X:00, 111; 00.11101 Y:00, 101; 00.10100 对阶后,Y:00, 111; 00.00101 尾数相加,00.11101 + 00.00101 = 01.00010 规格化,00, 111 + 1 = 01, 000,发生溢出
分析:B X:-0.111×21,X = 001, 1.001;Y:0.101×22,Y = 010, 0.101 对阶后,X = 010, 1.100,尾数做减法 1100 + 1011 = 10.111,右规,X-Y = 011, 1.011
2)两个规格化浮点数进行加减法运算,最后对结果规格化时,能否确定需要右规的次数?能否确定需要左规的次数?
两个 n n n 位的加减运算,其和/差最多为 n + 1 n+1 n+1 位,因此有可能需要右规,但右规最多一次。由于异号数相加,其和/差的最少位数无法确定,因此左规的次数也无法确定。但最多不会超过尾数的字长 n n n 位次
【灵活考察数据的表示与运算】
如.
分析: (1)会出现死循环,因为 unsigned int 为无符号整数,n = 0,n-1 的机器数全为 1,值为 232-1,为 unsigned int 能表示的最大数,条件 i<=n-1 永真,故出现死循环 (2)f1=f2,f(23)=224-1,理由:32 位 int 型是数据最大数位 232-1,未溢出;float 有 1 个阶符,8 位阶码,23 位尾数,可表示 24 位 1,故两者返回值相同,f1 的机器数为 00FF FFFFH,f2 的机器数为 4B7F FFFFH (3)f(24)=225-1,未超过 int 的表示范围,而 float 型数据只有 24 位有效位,舍入后数增大 (4)f(31)=232-1,其机器数为 32 个 1,对全 1 的 32 位补码,其真值为 -1,故 f1 的返回值为 -1;若要使 f1 的返回值与 f(n) 相等,最大的 n 为 30,因为 int 能表示的最大数为 231-1,其二进制为 0111 1111 … 1111 (5)阶码全 1,尾数全 0 的单精度浮点数对应的真值为 +∞;若要使 f2 得结果不溢出,float 能表示的最大数为 2127×(2-2-23) = 2128-2104,f(127) = 2128-1 显然大于 float 的最大数,f(126)=2127-1,2128-2104-2127+1 = 2104 [ 224-(223+1)-1 ] +1 > 0,故最大 n = 126;由(2)、(3)可知,若要使 f2 的结果精确,最大 n = 23
【并行进位链】
如.
分析:B,在设计多多位加法器时,为了加快运算速度而采用了快速进位链,即对加法器的每位都生成两个信号:进位信号 g g g 和进位传递信号 p p p,其中 g = X i Y i g =X_iYi g=XiYi, p = X i ⨁ Y i p=X_i\bigoplus Y_i p=Xi⨁Yi
【串行进位、并行进位的逻辑表达式】 【算术逻辑单元的功能和结构】
如.
分析:B,每片 74181 是 4 位的内部先行进位的 ALU 芯片(组内并行,组间串行),每 4 片74181 与 1 片 74182相连,可组成一个两级先行进位结构的 16 位 ALU,两个这种结构的 ALU 串行可构成两级先行进位的 32 位 ALU
分析:D,ALU 是运算器核心,数据总线供 ALU 与外界交互数据使用,溢出标志即为一个状态寄存器,地址寄存器属于存储器与运算器无关