C 语言中涉及的运算
运算类型速记
运算类型速记
- 按位运算:或运算(
|)、与运算(&)、取反运算(~)、异或运算(^) - 逻辑运算:或运算(
||)、与运算(&&)、非运算(!) - 移位运算
- 逻辑移位
- 算术移位:右移高位补符号
- 位扩展和位截断运算
- 0 扩展
- 符号扩展
定点数运算
带标志加法器
带标志加法器
- 溢出标志 OF(Overflow Flag):
- 符号标志 SF(Sign Flag):
- 零号标志 ZF(Zero Flag):,当且仅当
- 进位/借位标志 CF(Carry Flag):
无符号数和补码加减法
无符号数和补码加减法

- 即 各位取反
- ,CF 对于补码加减法运算无实际意义
- 无符号数( 和 就是 和 的二进制表示)
- 加法:
- 减法:
- 补码( 和 就是 和 的补码表示)
- 加法:
- 减法:
定点数乘法
原码乘法运算
原码乘法运算
补码乘法运算与 Booth 乘法
补码乘法运算与 Booth 乘法


Booth 乘法推导
A. D. Booth 提出了一种补码相乘算法:符号位与数值位合在一起参与运算,正数与负数同等对待,直接得到补码形式的乘积。下面以 位补码定点整数说明其推导思路- 设两个 位补码定点整数 根据补码定义,乘数 的真值可写成
- 将 改写为“相邻两位之差”的形式 利用 ,并令 (在最低位右侧附加一位 0),可推得 直观含义:当 与 相同(00 或 11)时,该位对系数为 0;当出现跳变时,系数为 +1(01 跳变)或 -1(10 跳变)
- 因而乘积可写成 这说明:只要判断乘数中每一位 与其低一位 的关系,就能决定在第 步对部分积是“加 ”、“减 ”还是“加 0”,再配合移位完成累加
-
递推规则与 Booth 判别式
-
实现层面的操作步骤
- 设初始部分积 ,附加位
- 循环 次()
- 根据 的状态,部分积加上 、加上 或加 0
- 将(部分积、乘数 、附加位 )作为一个整体,进行算术右移 1 位
定点数除法
浮点数运算的精度和舍入
G / R / S 三个附加位
G / R / S 三个附加位
- 保护位 G(警戒位):紧跟在有效位后面的第 1 位
- 舍入位 R:紧跟在有效位后面的第 2 位
- 粘位 S:后面所有位的“或”结果,即舍入位右边只要有 1,粘位则置为 1
舍入方式
舍入方式
- 就近舍入到偶数
就近舍入规则
- 朝 方向舍入
- 朝 方向舍入
-
朝 0 方向舍入










