内容概要:数据在计算机中的存储和运算、相关习题
数据的表示方法
r进制数:基数r,每个数码位可能出现r种字符,逢r进1
r进制数$\longrightarrow$十进制:各数码位与位权的乘积之和
十进制$\longrightarrow$r进制:
- 整数部分:除基取余法,先取得的“余”是整数的低位
- 小数部分:乘基取整法,先取得的“整”是小数的高位
二进制$\longrightarrow$八进制:每3个二进制对应一个八进制位
二进制$\longrightarrow$十六进制:每4个二进制位对应一个十六进制位
注意“补位”
真值和机器数
- 真值:现实中带正负号的数值
- 机器数:把正负号数字化的数
ASCII码:通常用8bit表示一个字符,最高位都为0。共128个字符,0-31、127为控制/通信字符;32-126为可印刷字符。所有大写字母、所有小写字母、所有数字的编码都连续。
汉字:区位码94×94。国标码=区位码+2020H。机内码=国标码+8080H。
字符串:从低地址到高地址逐个字符存储,常采用‘\0’作为结尾标志。对于多字节的数据(如汉字),可采取大/小端存储模式。大端模式:将数据的最高有效字节存放在低地址单元中。小端模式:将数据的最高有效字节存放在高地址单元中。
组成奇偶校验码的基本方法:在n位有效信息位上增加一个二进制校验位,构成一个n+1位奇偶校验码。
奇校验:使n+1位的奇偶校验码中1的个数为奇数。 偶校验:使n+1位的奇偶校验码中1的个数为偶数。
定点数的表示
定点数:小数点的位置固定
Eg:996.007 ——常规计数
浮点数:小数点的位置不固定
Eg:9.96007×102 ——科学计数法
无符号数:整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值。
通常只有无符号整数,而没有无符号小数
真值0有+0和-0两种形式
反码:正数的反码=原码,负数的反码=数值位取反
补码:正数的补码=原码,负数的补码=反码末位+1(要考虑进位)。将负数补码转回原码的方法相同:尾数取反,末位+1。
技巧:由[x]补快速求[-x]补的方法
符号位、数值位全部取反,末位+1
移码:补码的基础上将符号位取反。移码=真值+偏置值
注意: 移码只能用于表示整数
原码和反码的真值0有两种表示;补码和移码的真值0只有一种表示形式。
小结
定点数移位运算
算术移位
-
左移1位相当于×基数;右移1位相当于÷基数
-
原码、反码:符号位不参与移位。左移、右移都补0
-
补码:符号位不参与移位。左移补0、右移补符号数
负数补码最右边的1及其右边与原码相同,最右边的1的左边与反码相同
逻辑移位
- 左移右移都补0,移出的位舍弃
循环移位
- 不带进位位:用移出的位补上空缺
- 带进位位:移出的位放到进位位,原进位位补上空缺
注:由于原、反、补码位数限制,有时算术移位会有精度损失
定点数加减运算和溢出判断
定点数加减运算一律用补码
补码减法
- 将减数x取负得[-x]补,转变为加法[A-B]补=[A]补+[-B]补,符号位参与运算
溢出判断(补码)
- 上溢:正数+正数=负数
- 下溢:负数+负数=正数
- 采用双符号位,正数符号为00,负数符号为11。运算后若双符号位=01,则发生上溢;若双符号位=10,则发生下溢;若两个符号位相同则未发生溢出
- 双符号位补码相加的结果,不论溢出与否,最高符号位始终指示正确的符号
定点数乘法运算
原码乘法
运算器实现原码一位乘法
符号位通过异或确定;数值部分通过被乘数和乘数绝对值的n轮加法、移位完成。根据当前乘数中参与运算的位(MQ最低位)确定(ACC)加什么。若当前运算位**=1,则(ACC)+[|x|]原;若=0,则(ACC)+0**。
手算模拟运算器实现原码一位乘法
补码乘法
运算器实现补码一位乘法
手算模拟运算器实现补码一位乘法
原码一位乘法与补码一位乘法对比
定点数除法运算
原码除法
恢复余数法
加减交替法(不恢复余数法)
恢复余数法:减除数,若余数为负数,商0,加除数,逻辑左移,减除数,得新余数;若余数为正数,商1,逻辑左移,减除数,得新余数
不恢复余数法:减除数,若余数为负数,商0,逻辑左移,加除数,得新 余数;若余数为正数,商1,逻辑左移,减除数,得新余数
补码除法
加减交替法
强制类型转换
补码位扩展
- 定点小数:在最后补0
- 定点整数:在前面补符号数(无符号数补0)
数据的存储和排列
大小端模式
边界对齐
浮点数的表示
表示
阶码+尾数
- 尾数给出具体数值,阶码指明小数点前移、后移多少位
- 阶码通常是用补码、移码表示的定点整数
- 尾数通常是用补码、原码表示的定点小数
- N=rE×M
规格化
- 尾数的最高数值位必须是一个有效值(类比十进制科学计数法,通常我们会让数值部分最高位为非0)
- 左规:数值位最高位无效时,通过尾数算术左移、阶码减1的方法处理,直到尾数最高数值位有效时停止
- 右规:若采用双符号位表示尾数,则当运算后尾数“假溢出”时,可以通过尾数右移、阶码加1的方法处理
- 原码表示的尾数规格化:尾数的最高数值位必须是1
- 补码表示的尾数规格化:尾数最高数值位必须和尾数符号位相反
IEEE754规则
浮点数的运算
习题
1.已知[X]原,求[X/2]原和[2X]原 。
①[X]原= 0.0110000 ; ②[X]原=10011010
解析:
原码算术移位:符号位不变,数值部分左移或右移,移出的空位填 “0”。(左移一位相当于乘以2,右移一位相当于除以2)
① [X/2]原=0.0011000 [ 2X ]原=0.1100000
② [X/2]原= 10001101 [ 2X ]原= 10110100
2.设机器字长为8位,写出+0.375和-0.6875的二进制原码表示。
解析:
十进制$\longrightarrow$二进制原码:先转二进制再加符号位得原码
(+0.375)10 = (+0.011)2 [+0.011]原=0.011 = 0.0110000
(-0.6875)10 = (-0.1011)2 [-0.1011]原=1.1011 = 1.1011000
3.已知x,求x的补码[x]补。
①x=+0.1010110 ②x=-0.1010110 ③x=+1010110 ④x=-1010110
解析:
二进制真值$\longrightarrow$补码:先加符号位转成原码,然后转补码,正数不变,负数数值位取反加1
①[x]补=0.1010110 ② [x]补=1.0101010 ③ [x]补=01010110 ④ [x]补=10101010
4.已知[x]补,求[2x]补、[x/2]补
(1) [x]补=0.0101001, (2)[x]补=11011010
解析:
补码算术移位:符号位不参与移位。左移补0、右移补符号位
(1) [2x]补=0.1010010 [ x/2 ]补= 0.0010100
(2) [2x]补=10110100 [ x/2 ]补=11101101
5.已知[x]补,求[-x]补
(1) [x]补=1.0011010 ,(2) [x]补=10110010
解析:
[x]补$\longleftrightarrow$[-x]补:各位(含符号位)取反取反加1
(1) [-x]补=0.1100110
(2) [-x]补=01001110
6.将下列x的原码表示转化为补码表示。
[x]原=0.1010110 [x]原=1.1010110 [x]原=01010110 [x]原=11010110
解析:
原码$\longrightarrow$补码:正数不变,负数数值位取反加1
[x]补=0.1010110 [x]补=1.0101010 [x]补=01010110 [x]补=10101010
7.一个C语言程序在一台32位机器上运行。程序中定义了三个变量x、y、z,其中x和z是int型,y为short型。 当x=127,y=-9时,执行赋值语句z=x+y后,x、y和z的机器码分别是()
A.X=0000007FH,y=FFF9H,z=00000076H
B.X=0000007FH,y=FFF9H,z=FFFF0076H
C.X=0000007FH,y=FFF7H,z=FFFF0076H
D.X=0000007FH,y=FFF7H,z=00000076H
解析:
在C语言中,数据用补码存储。int型占4字节,32位;short型占2字节,16位。定点整数补码的位扩展是前面补符号数
[x]补=01111111=0000,0000,0000,0000,0000,0000,0111,1111=0000007FH
[y]补=10111=1111,1111,1111,0111=FFF7H
[z]补=[x+y]补=[x]补+[y]补=01111111+11110111=01110110=0000,0000,0000,0000,0000,0000,0111,0110 =00000076H
也可以直接127+(-9)=118=01110110=0000,0000,0000,0000,0000,0000,0111,0110 =00000076H
所以答案为D
8.假定编译器规定,int型占32位,short型占16位, 若有下列C语言语句:
unsigned short x=65530;
unsigned int y=x;
得到y的机器数为()
A. 0000 7FFAH
B. 0000 FFFAH
C. FFFF 7FFAH
D. FFFF FFFAH
解析:
在C语言中,数据用补码存储。无符号数与有符号数之间转换:不改变数据内容,改变解释方式。短整数$\longrightarrow$长整数:位扩展。无符号整数位扩展在前面补0。
216=65536,所以16个1为65535
short [x]补=11111111,11111010
int [y]补=00000000,00000000,11111111,11111010=0000FFFAH
所以答案为B
9.假定有4个整数用8位补码分别表示r1=FEH, r2=F2H,r3=90H,r4=F8H,若将运算结果存放在一个8位寄存器中,则下列运算会发生溢出的是 ()
A. r1×r2
B. r2×r3
C. r1×r4
D. r2×r4
解析:
用补码表示时8位寄存器所能表示的整数范围为-128到+127
r1=FEH=1111,1110 r1补=1000,0010=-2
r2=F2H=1111,0010 r2补=1000,1110=-14
r3=90H=1001,0000 r3补=1111,0000=-112
r4=F8H=1111,1000 r4补=1000,1000=-8
则r1×r2=28,r2×r3=1568,r1×r4=16,r2×r4=112,只有r2×r3结果溢出
所以答案为B
10.在32位计算机上,考虑以下C语言代码:
short si=-8196;
int i=si;
执行上述程序段后,i 的机器数表示为()
A. 0000 9FFCH
B. 0000 DFFCH
C. FFFF 9FFCH
D. FFFF DFFCH
解析:
在C语言中,数据用补码存储。int型占4字节,32位;short型占2字节,16位。短整数$\longrightarrow$长整数:位扩展。定点整数补码的位扩展是前面补符号数213=8192,所以第14位为1是8192
short [si]原 = 110,0000,0000,0100
short [si]补 = 101,1111,1111,1100=1101,1111,1111,1100
int[i]补=1111,1111,1111,1111,1101,1111,1111,1100=FFFF DFFCH
所以答案为D
11.某机器字长8位,采用补码形式(其中1位为符号位),则机器数能表示的范围是______。
A. -127~127
B. -128~128
C. -128~127
D. -127~128
解析:
最大正数:0111,1111 = 127。正数原码=补码
最小负数:1000,0000 = -128。符号位同时也可以看做数字位即表示-128,转换成补码为1,0000,0000
验证:127(0111,1111)+1(0000,0001)=-128(1000 0000)
8位二进制的补码取值范围是-128-127
所以答案为C
12.8位补码定点整数1001 0101扩展成16位后的值用16进制表示为
A.0095H
B.9500H
C.FF95H
D.95FFH
解析:
考查补码定点整数位扩展:前面补符号数
1111,1111,1001,0101 = FF95H
所以答案为C
13.考虑以下C语言代码:
short si=-8196;
unsigned short usi=si;
执行上述程序段后,usi的值为多少()
A.8196
B.34572
C.57339
D.57340
解析:
在C语言中,数据用补码存储。short型占2字节,16位。无符号数与有符号数之间转换:不改变数据内容,改变解释方式。
213=8192,所以第14位为1代表8192,即
short [si]原=110,0000,0000,0100
short [si]补=101,1111,1111,1100=1101,1111,1111,1100
unsigned short [usi]补=1101,1111,1111,1100
216=65536,所以16个1为65535,又213=8192,可得
[usi]补=65535-8192-2-1=57340
所以答案为D
14.(统考2015-13) 由3个“1”和5个“0”组成的8位二进制补码, 能表示的最小整数是()
A.-126
B.-125
C.-32
D.-3
解析:
-128=1000,0000,转换成补码为1,0000,0000
-127=1111,1111,转换成补码为1000,0001
-126=1111,1110,转换成补码为1000,0010
……
由以上分析可得:只要3个“1”和5个“0”组成的补码最小,则转换成原码再转换成的十进制整数也最小,
补码:1000,0011,原码:1111,1101,转换成十进制即-125
所以答案为B
15.(统考2019-13)考虑以下C语言代码:
unsigned short usi=65535;
short si=usi;
执行上述程序段后,si的值为多少()
A.-1
B.-32767
C.-32768
D.-65535
解析:
在C语言中,数据用补码存储。short型占2字节,16位。无符号数与有符号数之间转换:不改变数据内容,改变解释方式。
216=65536
unsigned short [usi]补=1111,1111,1111,1111
short [si]补=1111,1111,1111,1111=-32767
[si]原=1000,0000,0000,0001=-1
所以答案为A
16.将十进制真值(-127,-1,0,+1,+127)列表表示成二进制数及原码、反码、补码、移码值
解析:
二进制数 | 原码 | 反码 | 补码 | 移码 | |
---|---|---|---|---|---|
-127 | -0111,1111 | 1111,1111 | 1000,0000 | 1000,0001 | 0000,0001 |
-1 | -0000,0001 | 1000,0001 | 1111,1110 | 1111,1111 | 0111,1111 |
0000,0000 | 0000,0000 | 0000,0000 | 1000,0000 | ||
0 | 0000,0000 | ||||
1000,0000 | 1111,1111 | 0000,0000 | 1000,0000 | ||
+1 | +0000,0001 | 0000,0001 | 0000,0001 | 0000,0001 | 1000,0001 |
+127 | +0111,1111 | 0111,1111 | 0111,1111 | 0111,1111 | 1111,1111 |
0在[x]原和[x] 反中有两种表示
17.已知x1 =-0.1110,x2=+0.1101,
求:[x1 ]补,[-x1]补, [x2]补,[-x2]补。
解析:
[x]补$\longleftrightarrow$[-x]补:各位(含符号位)取反取反加1
[x1]补=1.0010
[-x1]补=0.1110
[x2]补=0.1101
[-x2]补=1.0011
18.x=+0.1101,y=+0.0110,求x-y
解析:
[x]补=0.1101
[y]补=0.0110
[-y]补=1.1010
[x-y]补=[x]补+[-y]补=0.1101+1.1010=0.0111
所以x-y=+0.0111
算术运算验证:0.1101-0.0110=+0.0111
19.(1)x=+0.1100, y=+0.1000,求x+y
(2)x=-0.1100, y=-0.1000,求x+y
解析:
运算后若双符号位=01,则发生上溢;若双符号位=10,则发生下溢。双符号位补码相加的结果,不论溢出与否,最高符号位始终指示正确的符号。
(1)[x+y]补=00.1100+00.1000=01.0100
双符号位出现“01”,表示上溢,即结果大于+1
(2)[x+y]补=11.0100+11.1000=10,1100
双符号位出现“10”,表示下溢,即结果小于-1。
20.某字长8位的计算机中,已知整型变量x、y的机器数分别为[x]补=11110100,[y]补=10110000。若整型变量 z=2×x+y/2,则z的机器数为( )
A. 11000000
B. 00100100
C. 10101010
D. 溢出
解析:
补码:符号位不参与移位。左移补0、右移补符号位
[2X]补=11101000
[y/2]补=11011000
[Z]补=[2X]补+[y/2]补=11101000+11011000=11000000
所以答案为A
21.若浮点数x的IEEE754标准存储格式为(41360000)16,求其浮点数的十进制数值。
解析:
由浮点数确定真值:
- 确定数符S、阶码E、尾数M的分布
- (-1)s×1.M×2E-127
IEEE754 32位标准:1+8+23
(41360000)16=(0100,0001,0011,0110,0000,0000,0000,0000)2
数符s=0,阶码E=(1000,0010)2=(130)10,尾数M=011011
X=(-1)s×1.M×2E-127=(-1)0×1.0111011×2130-127=+(1.011011)×23=+1011.011=(11.375)10
22.将(20.59375)10转换成IEEE754标准的32位浮点数的二进制存储格式。
解析:
由真值确定浮点数:
- 转换为二进制,移动小数点
- 确定数符S、阶码E、尾数M的分布
(20.59375)10=(10100.10011)2=(1.010010011)2×24
S=0,E=4+127=131=1000,0011,M=010010011
最后得到32位浮点数的二进制存储格式为:
0100,0001,1010,0100,1100,0000,0000,0000=(41A4C000)16
23.将5/32及-4120表示成IEEE754单精度浮点数格式,并用十六进制书写
解析:
由真值确定浮点数:
- 转换为二进制,移动小数点
- 确定数符S、阶码E、尾数M的分布
(1) (5/32)=(0.00101)2=(1.01)×2-3
S=0,E=-3+127=124=0111,1100,M=01
0011,1110,0010,0000,0000,0000,0000,0000=(3E200000)16
(2) (-4120)=(1000,0000,1100,0)=(1.000000011000)×212
S=1,E=12+127=139=10001011,M=000000011
1100,0101,1000,0000,1100,0000,0000,0000=C580C000H
24.将十六进制的IEEE754单精度浮点数42E48000转换成十进制数。
解析:
由浮点数确定真值:
- 确定数符S、阶码E、尾数M的分布
- (-1)s×1.M×2E-127
42E48000=0100,0010,1110,0100,1000,0000,0000,0000
S=0,E=1000,0101=133,M=1100,1001
(-1)0×(1.11001001)×26=1110010.01=114.25
25.设机器字长16位,定点表示,尾数15位,数符1位,问:
(1)定点原码整数表示时,最大正数是多少?最小负数是多少?
(2)定点原码小数表示时,最大正数是多少?最小负数是多少?
解析:
(1) 定点原码整数
最大正数:0111,1111,1111,1111=215-1=32767
最小负数:1111,1111,1111,1111=-(215-1)=-32767
(2)定点原码小数
最大正数:+0.111,1111,1111,1111,=1-2-15
最小负数:-0.111,1111,1111,1111,=-(1-2-15)
26.假设由S,E,M三个域组成的一个32位二进制字所表示的非规格化浮点数x,真值表示为:
X=(-1)s×1.M×2E-128
其中数符S为1位,阶码E为8位,尾数M为23位。
请问:x所表示的最大正数、最小正数、最大负数、最小负数是多少?
解析:
最大正数:0111,1111,1111,1111,1111,1111,1111,1111
最小正数:0000,0000,0000,0000,0000,0000,0000,0000
最大负数:1000,0000,0000,0000,0000,0000,0000,0000
最小负数:1111,1111,1111,1111,1111,1111,1111,1111
27.float类型(即IEEE754单精度浮点数格式)能表示的最大正整数是()
A. 2126-2103
B. 2127-2104
C. 2127-2103
D. 2128-2104
解析:
0111,1111,0111,1111,1111,1111,1111,1111
E=254,e=254-127=127,M=111,1111,1111,1111,1111,1111=(1-2-23)10
(-1)0×(1.111……)×2127=[1+(1-2-23)]×2127=(2-2-23)×2127=2128-2104
所以答案为D
28.假定变量i,f,d数据类型分别为int, float, double(int 用补码表示,float和double用IEEE754单精度和双精度浮点数据格式表示),已知i=785,f=1.5678e3,d=1.5e100, 若在32位机器中执行下列关系表达式,则结果为真的是() (I) i==(int)(float)i
(II) f==(float)(int)f
(III) f==(float)(double)f
(IV) (d+f)-d==f
A. 仅I和II
B. 仅I和III
C. 仅II和III
D.仅III和IV
解析:
由于(int)f=1,所以II错。IV的计算过程是先将f转换成双精度,然后加法运算,故得到 (d+f)-d双精度,而f为单精度,所以IV错
所以答案为B
29.float型数据通常用IEEE 754单精度浮点数格式表示。若编译器将float型变量x分配在一个32位浮点寄存器FR1中,且x = -8.25,则FR1的内容是()
A. C104 0000H
B. C242 0000H
C. C184 0000H
D. C1C2 0000H
解析:
由真值确定浮点数:
- 转换为二进制,移动小数点
- 确定数符S、阶码E、尾数M的分布
(-8.25)10=(1000.01)2=(1.00001×23)
S=1,E=3+127=130=1000,0010,M=00001
1100,0001,0000,0100,0000,0000,0000,000=C104 0000H
所以答案为A
30.某数采用IEEE单精度浮点数格式表示为 C640 0000H,则该数的值是( )
A. -1.5×213
B. -1.5×212
C. -0.5×213
D. -0.5×212
解析:
由浮点数确定真值:
- 确定数符S、阶码E、尾数M的分布
- (-1)s×1.M×2E-127
C640 0000=1100,0110,0100,0000,0000,0000,0000,0000
S=1,E=1000,1100=140,e=E-127=13,M=1
(-1)1×(1.1)×213=-1.5×213
所以答案为A
31.设x=2010×0.11011011,y=2100×(-0.10101100),求 x+y。
解析:
浮点加减运算操作:
- 求阶差并对阶(小阶向大阶)
- 尾数进行加或减运算
- 结果规格化
- 舍入处理
- 判溢出
注:
- 两数均以补码表示,阶码采用双符号位,尾数采用单符号位
- 补码算术右移:补符号数;补码算术左移:补0
- 补码表示的尾数规格化:尾数最高数值位必须和尾数符号位相反
x:[Ex]补=00010,[Mx]补=0.11011011
y:[Ey]补=00100,[My]补=1.01010100
求阶差:△E = Ey - Ex = [ Ey ]补 + [ - Ex ]补 = 00100 + 11110 = 00010=+2
对阶后:[Ex]补=00100,[Mx]补=0.00110110(11),其中(11)表示[Mx]补右移2位后移出的最低两位数
尾数加:[Mx]补 + [My]补 = 0.00110110(11) + 1.01010100 = 1.10001010(11)
规格化:左规1.10001010(11) = 1.00010101(10),E=00011
0舍1入:1.00010101 + 0.00000001 = 1.00010110
判溢出:阶码符号位为00,不溢出,故得最终结果为
x+y=2011×(-0.11101010)
32.在浮点数原码运算时, 判定结果为规格化数的条件是 。
A. 阶的符号位与尾数的符号位不同
B. 尾数的符号位与最高数值位相同
C. 尾数的符号位与最高数值位不同
D. 尾数的最高数值位为1
解析:
原码表示的尾数规格化:尾数的最高数值位必须是1
所以答案为D
33.若浮点数用补码表示,则判断运算结果是否为规格化数的方法是
A. 阶符与数符相同为规格化数
B. 阶符与数符相异为规格化数
C. 数符与尾数小数点后第一位数字相异为规格化数
D. 数符与尾数小数点后第一位数字相同为规格化数
解析:
补码表示的尾数规格化:尾数最高数值位必须和尾数符号位相反
所以答案为C
34.浮点数加减运算过程一般包括对阶、尾数运算、规格化、舍入和判溢出等步骤。设浮点数的阶码和尾数均采用补码表示,且位数分别为5位和7位(均含2位符号位)。若有两个数X=27×29/32,Y=25×5/8,则用浮点加法计算X+Y的最终结果是()
A. 00111 1100010
B. 00111 0100010
C. 01000 0010001
D. 发生溢出
解析:
浮点加减运算操作:
- 求阶差并对阶(小阶向大阶)
- 尾数进行加或减运算
- 结果规格化
- 舍入处理
- 判溢出
[Ex]补=00111,[Mx]补=00.11101
[Ey]补=00101,[My]补=00.10100
阶差=2,y向x看齐,[E]补=00111,[My]补=00.00101(00)
[Mx]补 + [My]补= 00.11101 + 00.00101(00) = 01.00010
发生尾数上溢,但是阶码00111,已经达到最大,尾数无法移位调整,发生无法拯救的尾数上溢
所以答案为D
选择题中简便方法:
在十进制中,X=27×29/32,Y=25×5/8=27×5/32
X+Y=27×(29/32+5/32),尾数大于1,发生尾数上溢,阶码数值位只有3位,最大为7,尾数无法移位调整,发生无法拯救的尾数上溢
所以答案为D
35.下列有关浮点数加减运算的叙述中,正确的是( )
Ⅰ.对阶操作不会引起阶码的上溢或下溢
Ⅱ.右规和尾数舍入都可能引起阶码的上溢
Ⅲ.左规时可能引起阶码的下溢
Ⅳ.尾数溢出时结果不一定溢出
A. 仅Ⅱ、Ⅲ
B. 仅Ⅰ、Ⅱ、Ⅳ
C. 仅Ⅰ、Ⅲ、Ⅳ
D. Ⅰ、Ⅱ、Ⅲ、Ⅳ
解析:
对阶是较小的阶码对齐至较大的阶码,Ⅰ 正确。
右规和尾数舍入过程,阶码加1而可能上溢,Ⅱ 正确,
同理 Ⅲ也正确。
尾数溢出时可能仅产生误差,结果不一定溢出,Ⅳ 正确。
所以答案为D