【软考备考】浮点数与规格化详解:把“科学计数法“学透,这类题就是送分(附 10 道练习)
上一篇我们解决了整数怎么存原/反/补/移码这篇解决一个更现实的问题0.00001 和 300000000000 这种数定点的格式根本存不下怎么办答案是浮点数——软考上午题里它常和上一篇的内容打包考 2~4 分而且考点高度固定阶码尾数分工、规格化判断、左规右规、范围计算。这篇照旧先讲懂再练透。10 道练习题前 5 基础、后 5 带坑答案详解在最后。一、浮点数就是二进制版的科学计数法你中学就会科学计数法123000000 1.23 × 10⁵ 0.0000456 4.56 × 10⁻⁵再大的数、再小的数都能写成一个不大的数 × 10 的几次方。浮点数是同一件事只是基数从 10 换成 2N 尾数 M × 2 的阶码 E 次方尾数 M定点小数相当于科学计数法里的 1.23携带这个数的全部有效数字阶码 E定点整数相当于那个5或-5表示小数点该往哪挪、挪几位基数 2固定不变所以不用存。存的时候机器里就两部分阶码一般用移码——还记得吗移码保序、比大小方便正好用来比阶码和尾数用原码或补码带上数符。二、一句话必考阶码定范围尾数定精度阶码决定浮点数的表示范围尾数决定浮点数的精度。直觉很好建立阶码是2 的几次方几次方越大数越大——管范围尾数是那串有效数字位数越多越精确——管精度。就像科学计数法里指数决定数量级1.23 和 1.23456789 的差别只在精确程度。三、为什么要规格化同一个数浮点写法有无数种0.1101 × 2⁴ 0.0110 × 2⁵ 0.0011 × 2⁶ ……问题来了尾数位宽是固定的比如就 8 位。写成0.0011010前面一堆 0 白白占着位置有效数字被挤掉精度浪费了而且一个数好几种写法表示不唯一机器没法愉快地处理。类比科学计数法我们规定 1≤a10所以 12300 只能写 1.23×10⁴不会写 0.0123×10⁶。浮点数的规格化是同一条规矩规格化让尾数的最高有效位必须是 1把有效位用满。四、规格化怎么判断本篇第一大考点关键看尾数用什么码表示规则不一样表格尾数码制规格化的判断正数形式负数形式原码最高数值位 10.1×××…1.1×××…补码符号位与最高数值位相异0.1×××…1.0×××…补码那条是坑集中地展开说透补码负数是取反加 1变来的所以原码里的最高位为 1翻译到补码里恰好变成最高位为 0。举个例子-0.1011原码 1.1011最高数值位1规格化 ✓ 补码取反 1.01001 → 1.0101符号1、最高数值位0相异 ✓ -0.0101原码 1.0101最高数值位0不规格化 ✗ 补码取反 1.10101 → 1.1011符号1、最高数值位1相同 ✗严丝合缝。所以符号位与最高数值位相异不是新规矩就是最高有效位为 1在补码世界的翻译。特大号坑-1/2。补码表示的 -1/2 是1.1000——符号位 1最高数值位也是 1相同所以不算规格化要左规处理尾数左移一位变1.0000即 -1阶码减 1。验算-1/2 -1 × 2⁻¹值没变 ✓。很多考生凭直觉认为 1.1000最高位是 1规格化正好掉进去。五、左规与右规什么时候往哪边挪规格化操作就两个动作记清楚触发条件左规尾数最高位不满足规格化原码 0.0××、补码 0.0×× 或 1.1××→尾数左移一位阶码减 1可能要移好几次右规运算后尾数溢出了双符号位出现 01 或 10→尾数右移一位阶码加 1只需一次。例0.0110 × 2⁵规格化——左移两位成0.1100阶码 5-23即0.1100 × 2³。六、范围计算四步套路走天下这是上午题的大题其实套路固定拿一道例题走一遍。例某浮点数阶码 4 位含 1 位阶符用移码表示尾数 8 位含 1 位数符用补码表示求能表示的最大正数和最小负数。第 1 步阶码范围。4 位移码和补码同范围上一篇的结论-8 ~ 7最大阶码 7第 2 步尾数范围。8 位补码定点小数-1 ~ (1-2⁻⁷)第 3 步最大正数 最大正尾数 × 2^最大阶码 (1-2⁻⁷) × 2⁷第 4 步最小负数 最小负尾数 × 2^最大阶码 -1 × 2⁷ -2⁷。如果问规格化最小正数规格化尾数的最小正值是 1/2即 0.1000000乘最小阶码2⁻¹ × 2⁻⁸ 2⁻⁹。注意别拿 2⁻⁷非规格化的最小尾数去乘——那又是一个坑。七、浮点加减法记住对阶就抓住了纲浮点加减分四步对阶 → 尾数加减 → 规格化 → 舍入。重点是第一步对阶原则小阶向大阶看齐——阶码小的那个把阶码加大到和大的一样同时尾数相应右移。为什么不是大阶向小阶看齐大阶要变小阶尾数得左移会把最高有效位挤出机器小阶变大阶尾数右移丢的只是最低位。两害相权取其轻丢低位损失小。八、10 道练习题基础题1~51.浮点数由阶码和尾数组成其中决定数值表示范围的是 决定表示精度的是 。A. 阶码、尾数 B. 尾数、阶码 C. 数符、阶符 D. 基数、阶码2.对浮点数进行规格化处理的主要目的是 。A. 扩大数值的表示范围 B. 充分利用尾数的有效位提高精度 C. 便于比较两个浮点数的大小 D. 简化浮点运算的规则3.浮点数尾数用原码表示下列尾数属于规格化数的是 。A. 0.001101 B. 1.010011 C. 0.110011 D. 1.0011004.某浮点数尾数为 0.0110、阶码为 5规格化后的结果为 。A. 尾数 0.1100阶码 7 B. 尾数 0.0110阶码 5 C. 尾数 0.0110阶码 3 D. 尾数 0.1100阶码 35.两个浮点数做加减运算时首先要进行对阶对阶的原则是 。A. 大阶向小阶看齐 B. 小阶向大阶看齐 C. 两阶码取平均值 D. 无需对阶进阶题6~10带坑6.浮点数尾数用补码表示下列尾数属于规格化数的是 。A. 0.110101 B. 1.110100 C. 1.100000 D. 0.0101017.某浮点数阶码 4 位含 1 位阶符用移码表示尾数 8 位含 1 位数符用补码表示其能表示的最大正数为 。A. 1 × 2⁷ B. (1-2⁻⁷) × 2⁸ C. (1-2⁻⁷) × 2⁷ D. 2⁷8.同上题的浮点格式其能表示的规格化最小正数为 。A. 2⁻¹⁵ B. 2⁻⁹ C. 2⁻⁸ D. 2⁻⁷9.浮点运算采用双符号位变形补码运算结果尾数为 01.10110应进行的规格化处理是 。A. 尾数左移一位阶码减 1 B. 尾数右移一位阶码不变 C. 运算出错结果只能丢弃 D. 尾数右移一位阶码加 110.设 16 位浮点数其中阶符 1 位、阶码值 6 位、数符 1 位、尾数 8 位。若阶码用移码表示尾数用补码表示则该浮点数所能表示的数值范围是 。A. -2⁶⁴ (1-2⁻⁸) × 2⁶⁴ B. -2⁶³ (1-2⁻⁸) × 2⁶³ C. -(1-2⁻⁸) × 2⁶⁴ (1-2⁻⁸) × 2⁶⁴ D. -(1-2⁻⁸) × 2⁶³ (1-2⁻⁸) × 2⁶³九、答案与详解1. A送分概念题阶码定范围尾数定精度。2. B规格化是把尾数有效位用满既提高精度又保证表示唯一。范围是阶码管的规格化动不了范围——选 A 的是概念串线。3. C原码规格化看最高数值位是否为 1。A 最高位 0B 是负数原码1.0…最高数值位 0D 同理。C0.110011最高数值位 1✓。4. D0.0110最高位不是 1左规左移两位成0.1100阶码减 25-23。左规阶码减——方向记反的会选 A。5. B小阶向大阶看齐小阶一方尾数右移只丢低位反过来会丢高位有效数字损失大。6. A补码规格化看符号位与最高数值位是否相异。A0.1…相异 ✓B1.1…相同 ✗C1.100000是 -1/2符号位与最高数值位都是 1相同✗——本题最大的坑它还得左规成 -1D0.0…相同都是 0✗。7. C四步套路4 位移码阶码范围-8 ~ 7移码与补码范围相同不是 ±8尾数最大正值 1-2⁻⁷。最大正数 (1-2⁻⁷) × 2⁷。选 B 的错把阶码范围当成 -8~8 或 -7~8 了。8. B规格化最小正数 规格化最小正尾数1/2即 0.1000000× 2^最小阶码 2⁻¹ × 2⁻⁸ 2⁻⁹。选 A2⁻¹⁵的是拿非规格化的最小尾数 2⁻⁷ 去乘的——非规格化的数确实更小但题目限定了规格化审题9. D双符号位 01 说明尾数相加溢出了此时右规尾数右移一位阶码加 1。左规A是处理最高位不是有效位的场景别搞反。10. B真题原型。阶码共 7 位阶符 1 阶码值 6移码范围-64 ~ 63尾数 9 位数符 1 尾数 8补码范围 -1 ~ 1-2⁻⁸。最小负数 -1 × 2⁶³ -2⁶³最大正数 (1-2⁻⁸) × 2⁶³。两个坑选 A 的把阶码最大值算成 64移码负数比正数多一个63 封顶选 D 的把最小负数的尾数当成 -(1-2⁻⁸)忘了补码尾数最小能到-1上一篇定点小数的结论这里回收了。十、六句话带走浮点数 尾数 × 2^阶码就是二进制的科学计数法阶码定范围尾数定精度规格化 最高有效位为 1原码看最高位是 1补码看符号位与最高位相异-1/2 的补码 1.1000 不规格化要左规成 -1左规阶码减右规溢出才用阶码加范围四步阶码范围 → 尾数范围 → 最大正数 最大尾数 × 2^最大阶 → 最小负数 最小尾数 × 2^最大阶。下一篇预告数据表示的最后一站——校验码奇偶校验为什么只能检错不能纠错、海明码的 2^k ≥ nk1 怎么算、CRC 为什么网络里到处都在用。至此计算机组成原理的高频送分点就齐了。