欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

2.2.2 定点数的运算(移位、原码和补码的加减乘除、溢出概念和判别方法)

发布时间:2024/10/14 编程问答 58 豆豆
生活随笔 收集整理的这篇文章主要介绍了 2.2.2 定点数的运算(移位、原码和补码的加减乘除、溢出概念和判别方法) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录:

    • 1.定点数移位运算
      • (1)算术移位
      • (2)逻辑移位
      • (3)* 循环移位
    • 2.定点数加减法运算
      • (1)原码加减
      • (2)补码加减
        • 为什么机器中使用补码运算呢?
    • 3.符号扩展
      • (1)正数符号扩展
      • (2)负数符号扩展
    • 4.溢出概念和判别方法
      • (1)采用一位符号位
      • (2)采用双符号位
    • 5.定点数乘法运算
      • (1)原码一位乘法
      • (2)补码一位乘法(Booth算法)
      • (3)乘法运算总结表
    • 6.定点数除法运算
      • (1)原码除法运算(不恢复余数法)
      • (2)补码除法运算(加减交替法)
      • (3)除法运算总结表


1.定点数移位运算

  • 移位运算:根据操作对象不同分为算术移位和逻辑移位
  • 算术移位:有符号数的移位
  • 逻辑移位:操作对象是逻辑代码,可视为无符号数

(1)算术移位

  • 算术移位规则如下(未溢出、未移出)

(2)逻辑移位

  • 移位规则:左移右移都是添0

(3)* 循环移位

  • 循环移位:分为带进位(CF)和不带进位的循环移位
  • 循环移位特点:移出的数据又被移入到数据中
  • 循环移位的应用:特别适合将数据的低字节和高子节数据互换
  • 移位规则见图:

2.定点数加减法运算

(1)原码加减

  • 加法:绝对值相加,符号位不变;
  • 减法:绝对值大的减绝对值小的数,结果的符号位与绝对值大的数相同。
  • 这里的加法运算,其实当两个数符号位不同时就按减法规则算。
  • 注意:运算时超出字长,则左边溢出位丢掉。

(2)补码加减

为什么机器中使用补码运算呢?

  • 因为补码统一了符号位和数值位,,加法和减法也可以统一处理,只需要加法器,不需要减法器,节省元件,简化了运算器的设计,提高效率。
  • 注意:符号位与数值为一起计算,符号位产生的进位丢掉,结果的符号位数值由运算得出。
  • 一题搞懂:

3.符号扩展

  • 符号扩展:有时需要把两种不同位数的数相加,那么就需要统一他们的位数,比如8位和16位数相加,要想得到正确的结果,必须把8位数转换成16位数形式。

(1)正数符号扩展

  • 原码=补码=反码:比如8位转16位:+12(10) = 0000 1100 , 转换成16位则为:0000 0000 0000 1100
  • 符号位为0,附加为都用0补充

(2)负数符号扩展

比如8位转16位:-12 (10) = 1000 1100

  • 原码:扩展方法与正数符号扩展相同,只不过最高位符号位变为1, 1000 0000 0000 1100
  • 补码:附加位补充1,符号位为1,1111 1111 1111 1100
  • 反码:附加位补充1,符号位为1,1111 1111 1111 1100

4.溢出概念和判别方法

  • 溢出:指参加运算的两个数,相加或相减,运算结果超过了机器字长所能表示的范围
  • 正溢出:运算结果大于机器字长所能表示的最大正数
  • 负溢出:运算结果小于机器字长所能表示的最小负数

(1)采用一位符号位

  • 设A的符号位As,B的符号位s,运算结果符号位Ss , 则溢出逻辑表达式:
  • 若V=0,表示无溢出
  • 若v=1,表示有溢出

(2)采用双符号位

  • 采用双符号位比如 S1S2,S1S2相同则不溢出;S1S2不同则溢出,此时最高位代表正确的符号
  • ① S1S2 = 00:结果为正数,无溢出
  • ② S1S2 = 01:结果正溢出
  • ③ S1S2 = 10:结果负溢出
  • ④ S1S2 = 11:结果为负数,无溢出

5.定点数乘法运算

(1)原码一位乘法

  • 运算细则:
  • 被乘数和乘数均取绝对值参加运算,符号位异或运算;
  • 部分积的长度和被乘数一样,取n+1位,初值为0;
  • 从乘数的最低位yn开始判断;若yn=1,则高位部分积加上被乘数|x| , 高位部分积然后右移一位;若yn=0,则高位部分积加上0,高位部分积右移一位;
  • 重复2步骤,判断n次
    • 一题搞懂原码一位乘法

    (2)补码一位乘法(Booth算法)

    • 一种有符号的乘法,采取相加和相减操作计算补码数据的乘积。
    • 运算规则:
  • 符号位参与运算,运算的数均以补码表示
  • 被乘数一般取双符号位参与运算,部分积取双符号位,初值为0,乘数可取单符号位
  • 乘数末位增设附加位yn+1,初值为0
  • 根据(yn,yn+1)的取值来确定操作,见下表规则
  • 有符号数,移位按补码右移算术移位规则进行,右移补充1,左移补充0
  • 按上诉步骤进行n+1次步骤,第n+1次不移位。累加n+1次,移位n次
    • 一题搞懂补码一位乘法

    (3)乘法运算总结表

    6.定点数除法运算

    • 在计算机中,除法运算可转换成“累加-左移”(逻辑左移);

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

    • 采用方法:原码不恢复余数法,也称原码加减交替除法;符号位和数值单独处理;

    假设除数[X]=xs.x1x2……xn , 除数[Y]=ys.y1y2……yn ,计算|X|/|Y|

    • 运算规则:
  • 符号位不参加运算
  • 先用被除数减去除数( |X| - |Y| = |X| + (-|Y|) = |X| + [|-|Y|]
    (1). 余数为正数时,够减,商上1,余数左移一位,再与除数做减法比较
    (2). 余数为负数时,不够减,商上0,加除数恢复成原来的值,将余数左移一位,再与除数做减法比较
  • 重复上述步骤,当第n+1步余数为负时,需加上|Y|得到第n+1步正确的余数
    • 一题搞懂:

    (2)补码除法运算(加减交替法)

    • 符号位与数值位一起参加运算
    • 除法第一步根据被除数和除数的符号决定是做加法还是减法
    • 上商的原则根据余数和除数的符号位共同决定,同号上1,异号上0,简单规律就是,够减上1,不够减上0
    • 最后一步商恒置为‘1’
    • 运算规则:
  • 符号位参与运算,除数、被除数、商和余数都用补码表示
  • 被除数和除数同号,则被除数减去除数;若被除数和除数异号,则被除数加上除数
  • 若余数和除数同号,则上商1,余数左移一位; 若余数和除数异号,则上商0,余数左移一位加上除数
  • 重复执行上一步骤n次
  • 若对商的精度无特殊要求,最后一位商恒置为1
    一题搞懂:

  • (3)除法运算总结表

    与50位技术专家面对面20年技术见证,附赠技术全景图

    总结

    以上是生活随笔为你收集整理的2.2.2 定点数的运算(移位、原码和补码的加减乘除、溢出概念和判别方法)的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。