Skip to content

4.2 定点数的移位运算与舍入操作

本节讨论计算机中对定点数进行移位和处理移位后精度损失的舍入操作。移位运算是实现乘除法的基础。

核心概念

1. 移位运算分类

逻辑移位 (Logical Shift)

  • 对象:无符号数。
  • 规则:
    • 逻辑左移:高位移出,低位补0。
    • 逻辑右移:低位移出,高位补0。
  • 效果:逻辑左移一位相当于乘以2,逻辑右移一位相当于除以2。

算术移位 (Arithmetic Shift)

  • 对象:带符号数(通常为补码表示)。
  • 核心:移位过程中符号位保持不变
  • 规则(补码):
    • 正数:与逻辑移位相同,移位后空位补0。
    • 负数:
      • 算术左移:符号位不变,高位移出,低位补0。(相当于乘以2)
      • 算术右移:符号位不变,低位移出,高位补1。(相当于除以2,向下取整)
  • 总结:算术右移时,高位填充的是符号位的值。

2. 舍入操作 (Rounding)

算术右移或浮点数运算时,会丢失一部分低位精度,需要通过舍入来减小误差。设保留 p 位,舍去 q 位。

恒舍法 (Truncation)

  • 方法:直接丢弃被移出的位。实现最简单,但会产生累计的负向误差。

冯·诺依曼舍入法 (恒置1法)

  • 方法:无论被舍去的位是什么,都将保留部分的最低位置为1。用于补偿恒舍法的负误差。

下舍上入法 (0舍1入)

  • 方法:类似于十进制的"四舍五入"。检查被舍去部分的最高位,若为0则恒舍;若为1则在保留部分的最低位加1。
  • 优点:误差较小,较为公平。
  • 缺点:需要执行一次加法操作。

查表舍入法 (ROM舍入)

  • 方法:将需要舍入的位连同保留部分的几位低位作为地址,查询预先计算好的ROM表得到舍入结果。
  • 优点:速度快。
  • 缺点:增加硬件成本。

易考点与难点

易考点:算术移位是必考点。务必掌握正数和负数补码的算术左移和右移规则,特别是负数右移高位补1。

难点:

  • 理解算术左移时可能发生的溢出问题。当移出的位与符号位不同时,表示结果溢出(例如,一个大的正数左移后变成负数)。
  • 区分不同舍入方法的规则和特点。