定点数的表示和运算

定点数的表示和运算

原码、反码、补码表示

X若为正整数,则原码、反码和补码相同

X若为负数,则反码为原码除符号位外取反,补码为原码除符号位外取反加一

原码、反码、补码范围

原码和反码的表示范围一样

  • 定点整数:–(2ⁿ–1) ≤ x ≤ 2ⁿ–1
  • 定点小数:–(1–2⁻ⁿ) ≤ x ≤ 1–2⁻ⁿ

补码比原码和反码多一个最小数(补码和移码表示+0和-0一样)

  • 定点整数:–2ⁿ ≤ x ≤ 2ⁿ–1
  • 定点小数:–1 ≤ x ≤ 1–2⁻ⁿ

移码和与补码只差一个符号位,对一个数补码的符号位取反得到该数的移码,

  • [X]移=2ⁿ+X
  • 取值范围和补码一样

定点数的移位运算

逻辑移位(针对无符号数)

逻辑移位不管是左移还是右移,都添0。

算术移位(针对有符号数)

  • 对于正数,由于原码,补码,反码与真值相同,因此移位后出现的空位均以0添之。

  • 对于负数,由于原码、补码、反码的表示形式不同,因此当机器数移位时,对其空位的添补规则也不同。

定点数的加减运算

原码的加减运算

  • 对于加法,符号位不参与运算,符号在数值位运算结束后确定。

  • 对于减法,比较两数的绝对值,并以较大绝对值减去较小绝对值。符号位不参与运算,符号在数值位运算结束后确定。

反码的加法运算

反码加法在最高位进位而丢掉高位时,必须在最低位补上+1

补码的加减运算

  • 对于加法,[X+Y]补 = [X]补 + [Y]补

  • 对于减法,[X-Y]补 = [X]补 + [-Y]补,其中[Y]补的各位(包括符号位)均取反,然后最低位+1,可以得到[-Y]补

  • 符号位与数值位一起参与运算

溢出的判别方法

  1. 符号比对法

    只有加法同号运算或者减法异号运算才会发生溢出,比较结果得出的符号是否发生了变化,如果变化则发生溢出。

  2. 进位匹配法

    最高数值位产生进位,而符号位不进位时,必然发生符号改变;最高数值位不进位,而符号位进位时,也必然发生符号改变。因此,判断最高数值位和符号位的进位是否匹配,就可以得知是否发生溢出。

  3. 双符号位法

    用两位符号位表示正负,其中00为正,11为负,运算时,两个符号位均参与运算。

    若结果符号位出现10表示发生负溢出,01表示发生正溢出。

定点数的乘法运算

原码乘法

补码乘法(Booth算法)

定点数的除法运算

原码除法(恢复余数法)

原码除法(加减交替法)

补码除法

定点数的表示和运算

作者

lvjie

发布于

2022-09-07

许可协议


:D 一言句子获取中...