🏷️ 知识点:IEEE浮点数表示
float型数据通常用IEEE754单精度浮点数格式表示。若编译器将float型变量x 分配在一个32位浮点 寄存器FR1中,且x=-8.25, 则 FR1的内容是()。
A.C1040000H
B.C2420000H
C.C1840000H
D.C1C20000H
[tag_link]
正确答案:A
本题题意即考查 IEEE 754 单精度浮点数 的表示。先将 x 转换成二进制为 − 1000.01 = − 1.00001 × 2 3 ,其次计算阶码 E,根据 IEEE 754 单精度浮点数格式,有 E-127=3,故 E=130,转换成二进制为 1000 0010。最后,根据 IEEE 754 标准,最高位的 “1” 是被隐藏的。IEEE 754 单精度浮点数格式:数符(1 位)+阶码(8 位)+尾数(23 位)。故,FR1 内容为 1; 1000 0010; 0000 10000 0000 0000 0000 000。即,1100 0001 0000 0100 0000 0000 0000 0000= C104000H。本题易误选 D, 未考虑 IEEE 754 标准隐含最高位 1 的情况,偏置值是 128。
某数采用IEEE754单精度浮点数格式表示为C6400000H, 则该数的值是()。
A.−1.5×213
B.−1.5×212
C.−0.5×213
D.−0.5×212
[tag_link]
正确答案:A
IEEE 754 单精度浮点数格式为 C640 OOOOH, 二进制格式为 1100 0110 0100 0000 0000 0000 0000 0000, 转换为标准的格式为: | 1(符号位) | 1000 1100(阶码) | 100 0000 0000 0000 0000 0000(尾数) | 数符 = 1 表示负数;阶码值为 1000 1100 - 0111 1111 = 0000 1101 = 13; 尾数值为 1.5(注意其有隐含位,要加 1)。因此,浮点数的值为 − 1 , 5 × 2 13 。
某数采用 IEEE754 单精度浮点数格式表示为 C6400000H,则该数的值是( )。
A.−1.5×213
B.−1.5×212
C.−0.5×213
D.−0.5×212
[tag_link]
正确答案:AIEEE 754 单精度浮点数格式为 C640 OOOOH, 二进制格式为 1100 0110 0100 0000 0000 0000 0000 0000, 转换为标准的格式为:| 1(符号位) | 1000 1100(阶码) | 100 0000 0000 0000 0000 0000(尾数) |数符 = 1 表示负数;阶码值为 1000 1100 - 0111 1111 = 0000 1101 = 13; 尾数值为 1.5(注意其有隐含位,要加 1)。因此,浮点数的值为−1,5×213。
已知带符号整数用补码表示,float 型数据用 IEEE 754 标准表示,假定变量 x 的类型只能是 int 或 float 。 当 x 的机器数为 C8000000H 时 ,x 的值可能是()。
A.-7×227; B.-216; C.217; D.25×2²7;
[tag_link]
正确答案:A
C800 0000H = 1100 1000 0000 0000 0000 0000 0000 0000 将其转换为对应的 float 或 int: 为 float 型时,尾数隐藏最高位 1 ,数符为 1 表示负数,阶码 10010000 = 2 7 + 2 4 = 128 + 16 , 再减去偏置值 127 得到 17 ,算出 x 值为 − 2 17 。为 int 型时,带符号补码,为负数,数值部分取反加 1 ,得 011 1000 0000 0000 0000 0000 0000 0000 ,算出 x 值为 − 7 × 2 27 。
已知 float 型变量用 IEEE754 单精度浮点数格式表示。若 float 型变量 x 的机器数为47300000H; 则 x 的 值 为 ( ) 。
A.0.375×2¹4
B.1.375×214
C.0.375×215
D.1.375×2¹5
[tag_link]
正确答案:D
本题考察 IEEE 单精度浮点数表示 。首先将十六进制转化为二进制: 0100 0111 0011 0000 0000 0000 0000 0000 。然后从中分解符号位、指数位和尾数位: 符号位: 0 。指数位: 1000 1110 。尾数位: 011 0000 0000 0000 0000 0000 。计算阶码: 1 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 0 × 2 0 = 128 + 8 + 4 + 2 = 142 。计算尾数: 1 × 2 0 + 0 × 2 − 1 + 1 × 2 − 2 + 1 × 2 − 3 = 1 + 0 + 0.25 + 0.125 = 1.375 。计算浮点数的值: ( − 1 ) 符号位 × 尾数 × 2 指数 = 1 × 1.375 × 2 15
float 类 型 ( 即IEEE754 单精度浮点数格式)能表示的最大正整数是()。
A.2¹²⁶-2¹⁰³
B.2¹²⁷-2¹⁰⁴
C.2¹²⁷-2¹⁰³
D.2¹²⁸-2¹⁰⁴
[tag_link]
正确答案:D
IEEE754 单精度浮点数 是尾数用采取隐藏位策略的原码表示,且阶码用移码(偏置值为 127 )表示的浮点数。规格化的短浮点数的真值为: ( − 1 ) S × 1. m × 2^(E−127), S 为符号位,阶码 E 的取值为 1 ∼ 254 (8 位表示),尾数 m 为 23 位,共 32 位;故 float 类型能表示的最大整数是 1.111⋯1 × 2^(254−127) = 2¹²⁷ × ( 2 − 2⁻²³ ) = 2¹²⁸ − 2¹⁰⁴ ,故选 D。
float 型数据常用IEEE754 单精度浮点格式表示。假设两个float 型变量x 和y 分别存放在32位寄存器 f1和 f2 中,若(f1)=CC900000H,(f2)=B0C00000H, 则x 和y 之间的关系为()。
A.x<y 且符号相同
B.x<y 且符号不同
C.x>y 且符号相同
D.x>y 且符号不同
[tag_link]
正确答案:A
(f1) 和 (f2) 对应的二进制分别是 ( 110011001001 ⋯ ) 2 和 ( 101100001100 ⋯ ) 2 , 根据 IEEE754 浮点数标准,可知 (f1) 的数符为 1,阶码为 10011001,尾数为 1.001,而 (f2) 的数符为 1,阶码为 01100001,尾数为 1.1 ,则可知两数均为负数,符号相同,B、D 排除。(f1) 的绝对值为 1.001 × 2 26 , (f2) 的绝对值为 1.1 × 2 − 30 ,则 (f1) 的绝对值比 (f2) 的绝对值大,而符号为负,真值大小相反,即 (f1) 的真值比 (f2) 的真值小,即 x<y,选 A。此题还有更为简便的算法, (f1) 与 (f2) 的前 4 位为 1100 与 1011,可以看出两数均为负数,而阶码用移码表示,两数的阶码头三位分别为 100 和 011, 可知 (f1) 的阶码大于 (f2) 的阶码,又因为是 IEEE754 规格化的数,尾数部分均为 l.xxx, 则阶码大的数,真值的绝对值必然大,可知 (f1) 真值的绝对值大于 (f2) 真值的绝对值,因为都为负数,则 (fl)<(f2), 即 x<y。
IEEE 754 单精度浮点格式表示的数中,最小的规格化正数是()。
A.1.0×2-126
B.1.0×2-127
C.1.0×2-128
D.1.0×2-149
[tag_link]
正确答案:A
IEEE754 单精度浮点数的符号位、阶码位、尾数位(省去正数位 1)所占的位数分别是 1、8、23 位。最小正数,数符位取 0,移码的取值范围是 1~254,取 1,得阶码值 1-127=-126(127 为我们规定的偏置值),尾数取全 0,最终推出最小规格化正数为 A 选项。
下列数值中,不能用IEEE754 浮点格式精确表示的()。
A.1.2
B.1.25 C.2.0
D.2.5
[tag_link]
正确答案:A
选项 B: 1.25 = 1.01 B × 2 0 ; 选项 C: 2.0 = 1.0 B × 2 ; 选项 D: 2.5 = 1.01 B × 2 1 。因此,选项 B、C 和 D 均可以用 IEEE 754 浮点数表示 精确表示。选项 A 的十进制小数 1.2 转换成二进制的结果是无限循环小数 1.001100110011…,无法用精度有限的 IEEE 754 格式精确表示。
-0.4375的 IEEE754单精度浮点数表示为()。
A.BEE00000H
B.BF600000H
C.BF700000H
D.COE00000H
[tag_link]
正确答案:A
IEEE754 单精度浮点数格式 中依次为数符 1 位、阶码 8 位(偏置值 127)、尾数 23 位(隐藏 1 位)。− 0.4375 = − 1.75 × 2 − 2 ,保证小数点前是 1。根据单精度浮点数格式,数符 为 1;阶码为移码表示,-2+127=125,写成 8 位二进制数为 01111101;尾数隐藏小数点前 的 1,剩下的 0.75 写成二进制数为 0.11,所以尾数部分是 1100…0。该浮点数的二进制格式为 1011111011100000000000000000000,对应的十六进制格式为 BEE00000H。
已知 float 型变量用 IEEE754 单精度浮点数格式表示。若 float 型变量 x 的机器数为8020000H, 则 x 的值 ()。
A. -2^{-128}
B. -1.01×2^{-127}
C. -1.01×2^{-126}
D. 非数(NaN)
A.
[tag_link]
正确答案:A
本题考查浮点数表示的 异常值 ,给定的机器数为 8020 0000H,表示一个 32 位的二进制数。我们需要将其转换为 float 型变量的值。8020 0000H = 1000 0000 0010 0000 0000 0000 0000 0000B。根据 IEEE754 单精度 浮点数格式,首位表示符号位,接下来的 8 位表示指数部分,剩下的 23 位表示尾数部分。拆 分该二进制表示,我们得到以下部分,符号位:1(表示负数),指数部分:00000000B(十进制值 为 0)。尾数部分:010 0000 0000 0000 0000 0000B。本题考查的点为 IEEE 754 单精度点数的表 示,因为指数部分为 0,尾数部分不为 0,所以为非规格化的表示,所以尾数部分的形式为 0.M 不是 1.M,同时指数部分是 -126,而不是 -127,则真值为 − 0.01 × 2 − 126 = − 2 − 128 ,正确答案为 A 选项。
某科学实验中,需要使用大量的整型参数,为了在保证表数精度的基础上提高运算速度,需要选择合 理的数据表示方法。若整型参数a 和β的取值范围分别为-2²⁰20、-24⁰240,则下列选项中,α和β最适 宜采用的数据表示方法分别是()。
A.32 位整数、32 位整数
B. 单精度浮点数、单精度浮点数 C.32 位整数、双精度浮点数
D. 单精度浮点数、双精度浮点数
[tag_link]
正确答案:C
a 最适宜采用 32 位整数,32 位整数可以表示 − 2 31 ∼ 2 31 − 1 的范围,对于 a 的取值范围,可以用 32 位整数表示,不会发生溢出或者精度损失,而且整数运算比浮点数运算更快,更省空间,所以优先使用 32 位整数而不是单精度浮点数。排除 B、D,根据 B 的取值范围,可以使用双精度浮点数存储,双精度浮点数存储范围为 − 2 1023 ∼ 2 1024 ,不会发生溢出问题,双精度浮点的小数精度为 15-16 位,比起单精度浮点,基本上不会发生精度损失。
下列选项中,能引起外部中断的事件是()。
A. 键盘输入
B. 除数为0
C. 浮点运算下溢
D. 访存缺页
[tag_link]
正确答案:A
外部中断 指的是 CPU 执行指令以外的事件产生的中断,通常是指来自 CPU 与内存以外的中断。
A 中键盘输入属于外部事件,每次键盘输入 CPU 都需要执行中断以读入输入数据,所以能引起外部中断。
B 中除数为 0 属于异常,也就是内中断,发生在 CPU 内部。
C 中浮点运算下溢将按机器零处理,不会产生中断。
而 D 访存缺页属于 CPU 执行指令时产生的中断,也不属于外部中断。
所以能产生外部中断的只能是输入设备键盘。
已知f(n)=∑i=0n 2i=2n+1−1=11⋯1 B,计算f(n)的 C 语言函数 f1 如下:
int f1(unsigned n) {
int sum=1, power=1;
for(unsigned i=0; i<= n -1; i ++) {
power * = 2;
sum += power;
}
return sum ;
}
将 f1 中的 int 都改为 float,可得到计算 f(n) 的另一个函数 f2。假设 unsigned 和 int 型数据都占 32 位,float 采用 IEEE754 单精度标准。请回答下列问题。
(1) 当 n=0 时,f1 会出现死循环,为什么?若将 f1 中的变量 i 和 n 都定义为 int 型,则 f1 是否还会出现死循环?为什么?
(2) f1(23) 和 f2(23) 的返回值是否相等?机器数各是什么(用十六进制表示)?
(3) f1(24) 和 f2(24) 的返回值分别为 33554431 和 33554432.0,为什么不相等?
(4) f(31)=232−1,而 f1(31) 的返回值却为 -1,为什么?若使 f1(n) 的返回值与 f(n) 相等,则最大的 n 是多少?
(5) f2(127) 的机器数为 7F80 0000H,对应的值是什么?若使 f2(n) 的结果不溢出,则最大的 n 是多少?若使 f2(n) 的结果精确(无舍入),则最大的 n 是多少?
[tag_link]
1)由于i和n是 unsigned 型,故i≤n−l是无符号数比较,n=0时,n−1的机器数为全1,值是232−1,为 unsigned 型可表示的最大数,条件i≤n−1永真,因此出现死循环。(2 分)若i和n改为 int 类型则不会出现死循环。(1 分)因为i≤n−1是带符号整数比较,n=0时,n−1的值是−1,当i=0时条件i≤n−1不成立,此时退出 for 循环。(1 分)
2)f1(23) 与 f2(23) 的返回值相等。(1 分)f(23) =223+1−1=224−1,它的二进制形式是24个1。int 占32位,没有溢出。float 有1个符号位,8个指数位,23个底数位,23个底数位可以表示24位的底数。所以两者返回值相等。f1(23) 的机器数是 00FF FFFFH。(1 分)f2(23) 的机器数是 4B7F FFFFH。(1 分)显而易见前者是24个1,即00000000111111111111111111111111(2),后者符号位是0,指数位为23+12710 =100101102,底数位是111111111111111111111112。
3)当 n=24 时,f(24) = 1 1111 1111 1111 1111 1111 1111 B,而 float 型数只有 24 位有效位,舍入后数值增大,所以 f2(24) 比 f1(24) 大 1。(1 分)【评分说明】只要说明 f2(24) 需舍入处理即可给分。
4)显然 f(31) 已超出了 int 型数据的表示范围,用 f1(31) 实现时得到的机器数为 32 个 1,作为 int 型数解释时其值为 -1,即 f1(31) 的返回值为 -1。(1 分)因为 int 型最大可表示数是 0 后面加 31 个 1,故使 f1(n) 的返回值与 f(n) 相等的最大 n 值是 30。(1 分)【评分说明】对于第二问,只要给出 n=30 即可给分。
5)IEEE754 标准用“阶码全 1、尾数全 0”表示 无穷大。2 返回值为 f1oat 型,机器数 7F800000H 对应的值是+∞。(1 分)当 n=126 时,f(126) =2127−1=1.1…1×2126,对应阶码为 127+126=253,尾数部分舍入后阶码加 1,最终阶码为 254,是 IEEE754 单精度格式表示的最大阶码。故使 2 结果不溢出的最大 n 值为 126。(1 分)当 n=23 时,f(23) 为 24 位 1,f1oat 型数有 24 位有效位,所以不需舍入,结果精确。故使 f2 获得精确结果的最大 n 值为 23。(1 分)【评分说明】对于第二问,只要给出 n=23,即可给分。对于第三问,只要给出 n=126,即可给分。