1080 字
5 分钟
2.4第二章总结
2.4 本章小结
- 在计算机中,为什么要采用二进制来表示数据?
答案已在本章开头给出。
- 计算机在字长足够的情况下能够精确地表示每个数吗?若不能,请举例说明。
不能。对于整数,只要其数值在当前字长可表示的范围内,即可精确表示。但对于小数(实数),由于采用二进制表示,只能精确表示形如若干个 ( 为正整数)之和的有理数。许多十进制有限小数在二进制下是无限循环小数,无法用有限位精确表示。例如,。因此,即使字长很长,这类数值也只能被近似表示。
- 字长相同的情况下,浮点数和定点数的表示范围与精度有什么区别?
在相同字长下,浮点数与定点数存在“范围vs精度”的权衡:
- 表示范围:浮点数通过阶码可表示极大或极小的数值,远大于定点数。
- 表示精度:定点数将所有位用于数值本身,具有恒定且较高的绝对精度;而浮点数需分配部分位给阶码,导致尾数位数减少,有效精度降低,且精度随数值增大而下降。
因此,浮点数以牺牲精度换取更大的表示范围,定点数以固定精度为代价限制其数值范围。
- 用移码表示浮点数的阶码有什么好处?
IEEE754标准采用移码表示阶码,主要有以下优势:
- 便于阶码比较。浮点数加减运算时需比较两个数的阶码大小,而移码比较更方便。
- 支持特殊值的统一编码。阶码全0:当尾数也为0时,表示 ;尾数非零时,表示非规格化数。阶码全1:保留作特殊用途——当尾数为0时,表示 ;尾数非零时,表示NaN(如 、 等无效运算结果)。
2.5 常见问题和易混淆知识点
- 如何表示一个数值数据?计算机中的数值数据都是二进制数吗?
在计算机内部,数值数据主要有两类表示方式:
- 二进制数值表示:包括无符号数(如地址)、有符号数(通常用补码表示)和浮点数。
- 二进制编码的十进制数(BCD码):用4位二进制编码一位十进制数。
需要强调的是,所有数据在物理存储上都是二进制比特序列,区别仅在于解释规则。
BCD并非真正的“十进制表示”,而是按十进制语义解释的二进制编码。
- 什么称为无符号整数的“溢出”?
对于 位无符号整数,其表示范围为 到 。当运算结果大于或等于 时,硬件仅保留低 位(结果对 取模),舍去高位,导致截断后的值不等于真实结果,这种现象称为
无符号溢出。在运算器中,通常通过进位标志(CF)来检测无符号溢出。
- 对于位数相同的定点数和浮点数,可表示的浮点数个数比定点数多吗?
不是。 位编码最多表示 个不同比特模式。定点数(如 位补码)通常能表示 个互异的有效值;浮点数中,部分编码用于表示 、 和 NaN 等特殊值,实际可表示的有效实数个数少于 。因此,在相同位数下,定点数通常能表示更多有效数值。
- 现代计算机中是否要考虑原码加减运算?如何实现?
现代计算机一般不实现原码加减运算。尽管IEEE754浮点数的尾数采用原码表示,但尾数本身是无符号的,符号由独立的符号位表示。在加减运算时,硬件根据操作数符号和运算类型,将尾数作为无符号整数送入通用ALU进行加或减运算,结果符号由控制逻辑生成。因此,浮点尾数运算本质上是无符号整数运算,无须原码加减机制。
