1080 字
5 分钟
2.4第二章总结

2.4 本章小结#

  1. 在计算机中,为什么要采用二进制来表示数据?

答案已在本章开头给出。

  1. 计算机在字长足够的情况下能够精确地表示每个数吗?若不能,请举例说明。

不能。对于整数,只要其数值在当前字长可表示的范围内,即可精确表示。但对于小数(实数),由于采用二进制表示,只能精确表示形如若干个 1/2k1/2^k (kk 为正整数)之和的有理数。许多十进制有限小数在二进制下是无限循环小数,无法用有限位精确表示。例如,0.1=(0.0001100110011)20.1=(0.0001100110011\cdots)_2。因此,即使字长很长,这类数值也只能被近似表示。

  1. 字长相同的情况下,浮点数和定点数的表示范围与精度有什么区别?

在相同字长下,浮点数与定点数存在“范围vs精度”的权衡:

  • 表示范围:浮点数通过阶码可表示极大或极小的数值,远大于定点数。
  • 表示精度:定点数将所有位用于数值本身,具有恒定且较高的绝对精度;而浮点数需分配部分位给阶码,导致尾数位数减少,有效精度降低,且精度随数值增大而下降。

因此,浮点数以牺牲精度换取更大的表示范围,定点数以固定精度为代价限制其数值范围。

  1. 用移码表示浮点数的阶码有什么好处?

IEEE754标准采用移码表示阶码,主要有以下优势:

  1. 便于阶码比较。浮点数加减运算时需比较两个数的阶码大小,而移码比较更方便。
  2. 支持特殊值的统一编码阶码全0:当尾数也为0时,表示 ±0\pm 0;尾数非零时,表示非规格化数。阶码全1:保留作特殊用途——当尾数为0时,表示 ±\pm\infty;尾数非零时,表示NaN(如 0/00/0\infty - \infty 等无效运算结果)。

2.5 常见问题和易混淆知识点#

  1. 如何表示一个数值数据?计算机中的数值数据都是二进制数吗?

在计算机内部,数值数据主要有两类表示方式:

  1. 二进制数值表示:包括无符号数(如地址)、有符号数(通常用补码表示)和浮点数。
  2. 二进制编码的十进制数(BCD码):用4位二进制编码一位十进制数。

需要强调的是,所有数据在物理存储上都是二进制比特序列,区别仅在于解释规则BCD并非真正的“十进制表示”,而是按十进制语义解释的二进制编码。

  1. 什么称为无符号整数的“溢出”?

对于 nn 位无符号整数,其表示范围为 002n12^n-1。当运算结果大于或等于 2n2^n 时,硬件仅保留低 nn 位(结果对 2n2^n 取模),舍去高位,导致截断后的值不等于真实结果,这种现象称为无符号溢出。在运算器中,通常通过进位标志(CF)来检测无符号溢出。

  1. 对于位数相同的定点数和浮点数,可表示的浮点数个数比定点数多吗?

不是nn 位编码最多表示 2n2^n 个不同比特模式。定点数(如 nn 位补码)通常能表示 2n2^n 个互异的有效值;浮点数中,部分编码用于表示 ±0\pm 0±\pm\infty 和 NaN 等特殊值,实际可表示的有效实数个数少于 2n2^n。因此,在相同位数下,定点数通常能表示更多有效数值

  1. 现代计算机中是否要考虑原码加减运算?如何实现?

现代计算机一般不实现原码加减运算。尽管IEEE754浮点数的尾数采用原码表示,但尾数本身是无符号的,符号由独立的符号位表示。在加减运算时,硬件根据操作数符号和运算类型,将尾数作为无符号整数送入通用ALU进行加或减运算,结果符号由控制逻辑生成。因此,浮点尾数运算本质上是无符号整数运算,无须原码加减机制。

评论