原码、补码、移码


  定点数的编码有:原码、补码、移码、反码(用得少)

原码

  原码就是符号位用0与1来表示,剩下的数表示数值。对于4位二进制数的原码表示方法中,0即可以用1000表示,也可以用0000表示。用原码表示数值的缺点是:0的表示并不唯一,不利于编程。同时,对原码执行加减操作不方便。
  原码通常用来表示定点小数,用来表示浮点数的尾数。

补码

  补码的概念离不开。一个数的补码是多少,只有在确定了模值是多少后才能确定。一个数的补码,就是对一个特定的模值取模。补码主要是为了实现计算机中对加减运算的统一,因为:

结论1:一个负数的补码等于模减该负数的绝对值。
结论2:对于某一确定的模,某数减去小于模的另一数,总可以用该数加上另一数负数的补码来代替。

  所有计算机都用补码来表示带符号整数。

原码、补码、移码_第1张图片

怎样求补码?

  • 结论一:0的补码唯一,00…0(n个0)。

  • 结论二:正数的补码就是它本身。

  • 结论三:一个负数的补码等于将对应正数补码各位取反、末位加一。(其正数从右向左遇到第一个1的前面各位取反

  • 结论四:补码的定义 假定补码有n位,则:[X]补= 2n + X (- 2n-1 ≤ X<2n-1 ,mod 2n) X是真值,[x]补是机器数。

一些特殊数的补码:

[-2n-1]补= 2n - 2n-1 = 10…0(n-1个0)(mod 2n)

[-1]补= 2n - 0…01 = 11…1(n个1) (mod 2n)

[0补= 0…0 (n个0)

举例:假设机器数为4位,-8的补码:

[-8]补=16 - 8 = 8 = 1000

[-8]补= [0111](取反) + 1 = 1000

[-8]补= [1000](从右向左遇到第一个1的前面各位取反)= 1000

怎样根据补码求真值?

简便求法:

  • 符号为0,则为正数,数值部分相同
  • 符号为1,则为负数,数值各位取反,末位加1(从右向左遇到第一个1的前面各位取反)

移码

  移码就是将每一个数值加上一个偏置常数( Excess / bias)。通常,当编码位数为n时,bias取 2n-1 或 2n-1-1(如 IEEE 754)。

  移码主要是用来表示定点整数,用于表示浮点数的阶(指数)。

原码、补码、移码_第2张图片

你可能感兴趣的:(计算机系统)