【计算机组成原理】反码&补码&移码的定义、相互转换及特征

前言:
    今天我也来写博客啦!昨天因为时间的原因遗留了反码补码移码等问题,今天狠狠滴把它解决!

look:了解真值机器数原码请点击:真值与机器值&小数原码与整数原码定义及举例

1. 反码

    反码其实就是原码补码之间的过渡,一句话总结:正数不变,负数数值取反。一般用[x]反表示x这个真值反码机器数;反码的定义中有小数反码整数反码,同样先来看整数反码:

1.1 纯整数反码

  • 纯整数反码定义
    =
    =
    [x]反
    0,x
    2^(n+1)-1+x
    2^n>x≥0
    0≥x>-2^n
    mod 2^(n+1)-1
    其中x是真值,n是整数位数(字节);若字节长为n+1,则反码整数的表示范围为 -(2n-1)≤x≤2n-1 关于原点对称(与原码相同)。举例子(以二进制八位为例):
    • +5 = [0,0000101] = [0,0000101] (正数的反码是它本身)
    • -116 = [1,1110100] = [1,0001011] (除符号位外,所有的数值位取反)

1.2 纯小数反码

  • 纯小数反码定义
    =
    =
    [x]反
    x
    2-2^(-n)+x
    1>x≥0
    0≥x>-1
    mod 2-2^(-n)
    若字节长为n+1,则反码整数的表示范围为 -(1-2-n)≤x≤1-2-n 关于原点对称(与原码相同)。举例子:
    • 0.25 = [0.0100000] = [0.0100000](正数的反码是它本身)
    • -0.75 = [1.1100000] = [1.0011111](除符号位外,所有的数值位取反)

注:

  • +0 = [0,0000000] = [0,0000000]
  • -0 = [1,0000000] = [1,1111111]
      0的原码和反码表示都不唯一!

2 补码

    补码一句话总结:正数不变,负数=反码+1=原码所有数值位取反+1。一般用[x]补表示x这个真值补码机器数;反码的定义中有小数补码整数补码,同样先来看整数补码:

2.1 纯整数补码

  • 纯整数补码定义
    =
    =
    [x]补
    0,x
    2^(n+1)+x =2^(n+1)-|x|
    2^n>x≥0
    0≥x≥-2^n
    mod 2^(n+1)
    其中x是真值,n是整数位数(字节);若字节长为n+1,则补码整数的表示范围为 -2n≤x≤2n-1 (比原码多表示一个“-2n,原因后面解释)。举例子(以二进制八位为例):
    • +5 = [0,0000101] = [0,0000101] = [0,0000101](正数的补码是它本身)
    • -116 = [1,1110100] = [1,0001011] = [1,0001100]反码+1 或 原码数值位取反+1)

2.2 纯小数补码

  • 纯小数补码定义
    =
    =
    [x]补
    x
    2+x=2-|x|
    1>x≥0
    0>x≥-1
    mod 2
    若字节长为n+1,则反码整数的表示范围为 -1≤x≤1-2-n (比原码多表示一个“-1^”,原因后面解释)。举例子:
    • 0.25 = [0.0100000] = [0.0100000] = [0.0100000](正数的补码是它本身)
    • -0.75 = [1.1100000] = [1.0011111]反 = [1.0100000]反码+1 或 原码数值位取反+1)

注:

  • +0 = [0,0000000] = [0,0000000] = [0,0000000] = -0
  • -0 = [1,0000000] = [1,1111111] = [0,0000000]补 = +0
    0的补码唯一!

    那么问题又来了,既然+0、-0都由[0,0000000]补表示,那 [1,0000000]表示的是什么呢?

    想要解决这个问题,我们就要使用定义来探讨了:

    由定义得:
    • [-1](带入小数定义2+x计算) = 10.0000000 - 1.0000000 = 1.0000000;小数补码比原码多表示一个"-1"
    • [-128](带入整数定义2(n+1)-|x|) = 28-128=128 = 1,0000000 ;整数补码比原码多表示一个"-128"

3. 移码

    在真值X上加上一个常数(偏置值),通常这个常数取2n,相当于X在数轴上向正方向偏移了若干单位。一句话总结移码表示方法:补码的基础上将符号位取反。一般用[x]移表示x这个真值移码机器数;移码只能用来表示整数

3.1 移码的定义

=
条件
[x]移
2^n+x
2^n>x≥2^(-2)

其中机器字长1n+1;移码的整数范围:-2n≤x≤2n-1原码移码举例:

  • +5 = [0,0000101] = [0,0000101] = [0,0000101] = [1,0000101]正数移码 = 正数原码符号取反
  • -116 = [1,1110100] = [1,0001011] = [1,0001100] = [0,0001100]负数移码 = 原码全部取反后 + 1 = 补码的符号位取反

也可以从定义上来理解(字长8位):

  • x1 = +10101—> [x1]= 27 + 10101 = 1,0010101( x1 = 20 + 22 +24 = 21D2
  • x2 = -10101—> [x2] = 27 + (-10101) = 0,1101011(- x2 = -21D )

3.2 移码的特点

  • 移码中的零表示唯一,[+0] = 2n + 0 = [-0] = 2n - 0 = 100…0(n个"0")
  • 移码全为 0 时,对应真值的最小值 -2n移码全为 1 时,对应真值的最大值 2n-1
  • 保持数据原有的大小顺序,移码大真值大,移码小真值小(谁想出来的,太天才了!)

结束语:
    花了好一会儿终于把反码补码移码的定义及之间的转换总结完成了!下次更新进制间的转换或者加减乘除?,要不还是技术文章吧(基础博客写起来好累)。不积跬步无以至千里,希望自己可以每天努力一点!


  1. 机器字长:计算机进行一次整数运算所能处理的二进制数据的位数(整数运算即定点整数运算) ↩︎

  2. B(binary):二进制D(decimal):十进制;O(Otcal)&Q:八进制(因为O和0太容易混淆;一般使用Q);H(Hexadecimal):十六进制;所以这里的21用十进制表示为21D,当然十进制字母可以省略。 ↩︎

  • 10
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值