定点数的表示和运算

定点数的表示和运算

定点数的表示

有符号数和无符号数

  • 无符号数

    机器字长的二进制位均为数值位,无符号

  • 有符号数

    最高位0/1表示正/负

机器数定点表示

  • 定点小数

    定点小数是纯小数;

    约定小数点位置在符号位之后,有效数值部分最高为之前

  • 定点整数

    定点整数是纯整数;

    小数点位置在有效数值部分的最低位之后

机器数表示方法

  • 原码表示法

    1. 最高位为符号,其余各位表示数的绝对值
    2. 纯小数的原码
      • 字长为n+1
      • 范围为 − ( 1 − 2 − n ) < = X < = 1 − 2 − n -(1-2^{-n}) <= X <= 1-2^{-n} (12n)<=X<=12n
      • 关于原点对称
    3. 纯整数的原码
      • 字长为n+1
      • 范围为 − ( 2 n − 1 ) < = X < = 2 n − 1 -(2^n-1) <= X <= 2^n -1 (2n1)<=X<=2n1
      • 关于原点对称
  • 补码表示法

    1. 补码可以更好的表示加减法
    2. 纯小数补码
      • 表示范围: − 1 < = X < = 1 − 2 − n -1 <= X <= 1-2^{-n} 1<=X<=12n
      • 比原码多表示-1(1.0000)
    3. 纯整数补码
      • 表示范围: − 2 n < = X < = 2 n − 1 -2^n <= X <= 2^n-1 2n<=X<=2n1
      • 比原码多表示 − 2 n -2^n 2n (10000000)
    4. 补码的算数移位
      • 实现除法功能:符号位与数值位一起右移,保持原符号位数值不变
      • 变形补码:模4补码(正/负:00/11)
  • 反码表示法

    1. 原码与补码相互转化的过渡
    2. 纯小数反码
      • 表示范围: − ( 1 − 2 − n ) < = X < = 1 − 2 − n -(1-2^{-n}) <= X <= 1-2^{-n} (12n)<=X<=12n
      • 关于原点对称
    3. 纯整数反码
      • 表示范围: − ( 2 n − 1 ) < = X < = 2 n − 1 -(2^n-1) <= X <= 2^n -1 (2n1)<=X<=2n1
      • 关于原点对称
  • 移码表示法

    1. 常用来表示浮点数的阶码,只能表示整数
    2. 最小值: − 2 n -2^n 2n(全零) 最大值: 2 n − 1 2^n-1 2n1(全1)
    3. 移码大,真值就大
    4. 真值零唯一表示
  • 不同表示方法之间的项目转化

    1. 正数:原码,反码,补码相同
    2. 负数:
      • 原码符号位不变,数值位取反得到反码
      • 原码符号位不变,数值位取反加1得到补码
    3. 补码符号位取反得到移码

定点数的运算

定点数移位运算

  • 算数移位

    1. 正数:移位后添0

    2. 负数:

      • 原码添0
      • 补码左0右1(从低位向高位找到第一个‘1’时分左右,‘1’包含在右)
      • 反码全部添1
    3. 符号位不参与运算

  • 逻辑移位

    1. 将操作数看做无符号数
    2. 左移或者右移都要添0
  • 循环移位

    1. 带进位标志位的循环移位
    2. 不带进位标志位的循环移位
    3. 适合将数据的低字节数据和高字节数据互换

原码定点数的加减法运算

  • 加法准则

    1. 符号相同:绝对值相加,符号不变
    2. 符号不同:绝对值大的减去绝对值小的,符号取绝对值大的
  • 减法准则

    1. 减数的符号取反,将其与被减数做原码加法运算

补码定点数加减法运算

  1. 参与的操作数均为补码
  2. 按照二进制规则运算,逢2进1
  3. 符号位与数值位同时参与运算,符号位产生的进位丢掉,结果的符号由运算得出
  4. 补码运算结果仍是补码

符号扩展

  1. 正数:在原有的基础上,添0凑位即可
  2. 负数
    • 原码:符号位为1,其余和正数相同
    • 补码:加1填充(整数)加0填充(小数)
    • 补码:加1处理

溢出概念和判断方法

  1. 上溢:大于最大可以表示的正数

  2. 下溢:小于最小可以表示的负数

  3. 补码判断溢出的办法

    • 一位符号位:

      A的符号位为 A S A_S AS, B的符号位为 B s B_s Bs,运算结果的符号位为 S s S_s Ss

      V = A s B s S s ˉ + A s ˉ B s ˉ S s V = A_sB_s\bar{S_s} + \bar{A_s}\bar{B_s}S_s V=AsBsSsˉ+AsˉBsˉSs

      V=0,表示无溢出;V=1表示有溢出

    • 双符号位

      00:结果为正数,无溢出

      01:结果正溢出

      10: 结果负溢出

      11:结果为负数,无溢出

    • 一位符号位根据数据位进位判断

      符号位与最高数位的进位相同,无溢出,否则溢出

定点数的乘法运算

  • 原码一位乘法

    1. 符号位异或,被乘数和乘数取绝对值运算
    2. 部分积取n+1位,初值为0
    3. 根据乘数的最低位 y n y_n yn判断
      • y n = 1 y_n=1 yn=1:部分积加上被乘数,右移一位
      • y n = 0 y_n=0 yn=0:部分积加0右移一位
    4. 重复3,判断n次
    5. 逻辑右移,符号位不参与运算
    6. 符号位部分积2位,考虑绝对值大于1的情况
  • 补码一位乘法(Booth算法)

    1. 符号位参与运算,补码的算数右移
    2. 被乘数双符号位;部分积双符号位,初值为0;乘数取单符号位
    3. 乘数末位为 y n y_n yn,增设 y n + 1 y_{n+1} yn+1
      • 00或11:部分积右移1位
      • 01:部分积加 [ X ] 补 [X]_补 [X],右移一位
      • 10:部分积加 [ − X ] 补 [-X]_补 [X],右移一位
    4. 执行n+1次,n+1次只累加,不移位

定点数的除法运算

  • 原码除数运算(恢复余数法)

    默认商1,如果余数为负,则需要加上除数,恢复正确的余数,商0;

  • 原码除数运算(不恢复余数法)

    1. 商符和商值分开,符号位不参与运算
    2. 被减数减去除数
    • 余数为正,商1,余数和商左移1位,减去除数
    • 余数为负,商0,余数和商左移1位,加上除数
    1. n+1步余数为负,是需要再加除数,得到正确的余数(余数和被除数号)
  • 补码除法运算(加减交替法)

    1. 符号位参与运算;除数,被除数,商和余数都用补码表示
    2. 被除数与除数同号,则被除数减去除数;被除数与除数异号,被除数加上除数
    3. 若余数与除数同号,商1,余数左移1位减去除数;余数与除数异号,商0,余数左移1位加上除数
    4. 重复3执行n次;加减次数总共n+1次
    5. 对商的精度没有要求,则一般采用“末位恒置1”法;

强制类型转换

  • 有符号数和无符号数的转换

    强制转化的结果二进制位值不变,改变了解释这些位的方式

  • 不同字长整数之间的转换

    1. 大字长变量向小字长变量转换
      • 高位直接截断,地位直接赋值
    2. 小字长变量向大字长变量转换
      • 负数添1
      • 正数添0

数据的存储和排列

  • 大端模式和小端模式

    1. 多字节数据存放在连续的字节序列
    2. 大端模式高字节数据放在低地址部分;小段模式相反
    3. 小端模式便于机器运算
  • 边界对齐

    1. 字节寻址可按字节、半字、字寻址
    2. 每次访存只能读/写一个字
    3. 边界对齐方式和边界不对齐方式
    4. 边界对齐空间换时间的思想
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值