PC_二进制移位运算/定点数移位/算数移位及其移位后的空位添补规则/机器数位数扩充

定点数位数扩充(补齐)

  • 有时候,给定真值的二进制表示位数较短,为了对齐机器字长(寄存器字长),需要扩充位数
  • 扩充后的机器码所对应的真值与扩充前的真值相等🎈
  • 主要讨论3种机器码的扩充问题
    • 原码(T(x))
    • 补码(O(x))
    • 反码(A(x))

正数的机器码扩充

  • 正数的机器码扩充比较容易,因为T(x)=O(x)=A(x)
  • 它们都是在边缘补0
    • 整数在高位补0
    • 小数在低位补0

负数的机器码扩充

  • 不同的机器码具有
    • 共同点:
      • 符号位不变
    • 不同点:
      • 补位数码规律不同

原码

  • 符号位外
    • 整数扩充:高位补0
    • 小数扩充:低位补0

反码

  • 符号位外
    • 整数扩充:高位补1
    • 小数扩充:低位补1

补码

  • 符号位外
    • 整数扩充:高位补1
    • 小数扩充:低位补0

定点数的移位运算

算数移位

  • 算数移位的对象是有符号数(机器数)
    • 移位过程中,符号位保持不变
    • 相当于对被移动的有符号机器数 x x x的真值(二进制形式)做相应的移动

算数移位的实质

  • 设 真 值 x 的 机 器 码 为 X ( x ) 设真值x的机器码为X(x) xX(x)
    • X可以取(原码/补码/反码)函数中的任意一个
  • 对 X ( x ) 进 行 算 数 移 位 , 就 是 为 了 对 真 值 x 进 行 乘 以 基 数 r 或 者 除 以 基 数 r 的 操 作 对X(x)进行算数移位,就是为了对真值x进行乘以基数r或者除以基数r的操作 X(x),xrr
    • 十进制数中也有类似的操作,只不过通常我们移动的是小数点,来达到类似的效果
    • 二进制计算机以2为基数;十进制数以10为基数
    • 移位之后,真值需要补位(而且总是补0)
      • 左移引起低位缺失,补0
      • 右移引起高位缺失,补0
  • 而二进制机器码对真值的0/1串做了处理,因此对应到机器码里的补位需要分别讨论

逻辑移位

  • 逻辑移位将操作数视为无符号数
  • 移位和添补规则:
    • 逻辑左移:
      • 高位移丢
      • 低位添0
    • 逻辑右移:
      • 低位移丢
      • 高位添0

对比算数移位

  • 逻辑移位将寄存器中的数最高位视为数值位,一并参与移动
  • 算数右移:(以单符号位为例)
    • 不移动最高位(符号位),被移动的位从第二位开始
  • 寄存器中的内容为:x=10110010
    • 对其进行逻辑右移
      • 01011001
    • 对其进行算数右移
      • 如果将其视为补码,做右移1位操作:1,1011001
    • 为了避免上述x左移最高位丢1,可使用带进位( C y C_y Cy)的左移(将符号位)移入 C y C_y Cy

循环移位

  • 分为:

    • 带进位标志CF的循环移位(大循环)
    • 不带进位标志的循环移位(小循环)
  • 主要特点

    • 移除的数位又被移入到数据中
    • 是否带进位:取决于是否将进位标志CF加入循环移位
  • 循环移位特别适合将数据的低字节数据和高字节数据互换

二进制移位操作

  • 计算机中小数点的位置是事先约定的,

    • 因此,二进制表示的机器数在相对于小数点作n 位左移或右移时,其实质就是该数乘以或除以 2 n ( n = 1 , 2 , ⋯   , n ) 2^{n}(n=1,2, \cdots, n) 2n(n=1,2,,n)

    • 对于带符号数 s = ± ∑ i = 0 n x i 2 i s=\pm\sum\limits_{i=0}^{n}x_i2^i s=±i=0nxi2i

      • 左移一位(如果产生溢出)相当于乘以2

      • 右移一位(如果不考虑被因移位而被舍去的末尾位),相当于除以2

🎈单符号位定点小数的移位操作

结论

  • 负数的补码左移,低位补0(空位产生于低位)
  • 负数的补码右移,高位补1(空位产生于高位)
  • 在这里插入图片描述

声明

  • 尽管您不记得该表格了,但是只要您会把不同机器码转为原码(或真值),您就可以通过原码来作为中介,通过原码的移位结果计算回转换前的机器码形式,也可以得到结果.

补位解释

  • 总结出来的三种机器码的移位填补规则
    • 在负数部分,三种机器码的移位添补规律虽然各有不同特点
    • 但是体现在真值上的移位效果则较为一致:都是对真值进行补0

正数

  • 由 于 x 的 原 码 , 补 码 , 反 码 相 同 , 即 : T ( x ) = C ( x ) = C 1 ( x ) 由于x的原码,补码,反码相同,即:T(x)=C(x)=C_1(x) x,,,:T(x)=C(x)=C1(x)

    • 所以,它们的补位操作一致

    • 我们以原码的补位为代表,容易知道,补的数是0

负数🎁🎁

  • 机 器 数 对 应 的 真 值 x 为 负 数 时 机器数对应的真值x为负数时 x

    1. 由于负数的原码数值部分与真值相同,故在移位时只要使符号位不变,其空位均添即可。

    2. 由于负数的反码各位除符号位外与负数的原码正好相反,故移位后所添的代码应与原码相反,即全部添1。

    3. 分析**任意负数x的补码T(x)**可发现

      • 从T(x)由低位向高位找到第一个“1”时(为了方面描述,称这个1为 x α x_\alpha xα(即,第 α \alpha α位小数 x α = 1 x_\alpha=1 xα=1))

      • x α x_\alpha xα左边的各位均与对应的反码相同

      • x α x_\alpha xα右边的各位(包括此 α \alpha α在内)均与对应的原码相同

        • 🎈这个规律(现象是在移位操作之外就存在的),下面会给出推导过程
      • 故负数的补码左移时,因空位出现在低位,则添补的代码与原码相同,即添0;

      • 右移时因空位出现在高位,则添补的代码应与反码相同,即添1

🎈例子

  • 机器数字长为 8 位 ( 含 1 位符号位 ) ,

    • 若整数 A = ± 26 A=\pm 26 A=±26,1

    • 写出三种机器数左,右移一位和两位后的表示形式及对应的真值,

    • 并分析结果的正确性:

正数例子

  • 在这里插入图片描述

    • 可见,对于正数,三种机器数移位后符号位均不变

    • 左移时最高数位丢1,结果出错;

    • 右移时最低数位丢1 ,影响精度

负数例子

  • 在这里插入图片描述
🎈负数补码例
  • 和移位前的二进制代码做对比

  • 在这里插入图片描述

  • 以下精度问题规律,可以从原码出发举例体验.

    • 负数的原码左移时,高位丢1,结果出错;右移时,低位丢1,影响精度。

    • 负数的补码左移时,高位丢0,结果出错;右移时,低位丢1,影响精度。

    • 负数的反码左移时,高位丢0,结果出错;右移时,低位丢0,影响精度。

🎈 双符号位算数移位

结论

  • 双符号位具有判断溢出的便利特点
    • 当两位符号位相同(无溢出时)
      • 此时两位符号位都表示真实符号位
      • 移位规律按照单符号位的移位规律执行(补位)
    • 当两位符号位不同(溢出)
      • 此时低位符号位不是真实符号位!
        • 可将其理解为数值位
        • 此时对该位数进行右移,不会导致高位缺失!
        • 因此不需要补位,只需要将低符号位一并右移即可
        • 最后高符号位复制一份,覆盖低符号位即可
      • 低位符号位需要参与移动,高位符号位不参于移动

解释

  • 为了更加更好的理解,稍做推导

  • KaTeX parse error: Undefined control sequence: \set at position 176: …_1+y_1+C_{2}\in\̲s̲e̲t̲{2,3} \\C_i表示从最…

  • 符号位不参与移动

    • 符号位是单独处理(保持),
    • 在单符号位的算数移位中也是不参于移位的)
  • 下面介绍的两数相加进位规律告诉我们,双符号位最高位为什么是最终(两数相加减真实正确结果)的符号位

    • 两数相减在计算机中也是转换为加法运算,因此仅讨论加法
    • 该规律只是原因之一,可以结合真值表来完整证明

例(补码双符号位)

  • 一般双符号位移位在补码上用的比较多,(双符号位法计算补码浮点数加/减法中的规格化中会遇到)

  • 对下面的双符号位小数(补码形式)进行移位操作

    • 00.11000
      • 00.01100
    • 11.110001
      • 11.1110001
    • 01.110001
      • 00.1110001
    • 10.110001
      • 11.0110001
posted @ 2021-06-22 12:20  xuchaoxin1375  阅读(8)  评论(0编辑  收藏  举报  来源