(1.2)原码、反码、补码与移码公式记忆方法(个人总结)

1、理解原码、反码、补码与移码

  给定一个数,其真值为x,机器字长为n,则针对带符号数:

码制 理解
原码 取|x|转化成2进制,若为正数,符号位(即最高位)为0,若为负数,符号位为1。
反码 针对原码,即除符号位外,其它位取反。
补码 针对原码,即除符号位外,其它位取反,再加1。
移码 补码符号位取反(偏移量为2n-1)。

2、原码、反码、补码与移码取值范围

  针对机器字长为n的带符号数x,原码与反码取值范围一样,以下整数均为纯整数,小数均为纯小数:

类型 取值范围
正整数 0 <= x <= 2(n-1) - 1
负整数 - (2(n-1) - 1) <= x <= 0
正小数 0 <= x < 1
负小数 -1 < x <= 0

  直接看公式可能不容易记住,所以最好是记实例。针对机器字长为8位(即n=8)的带符号纯整数x,其纯整数取值范围是-127 ~ 127,即127= 128-1=27-1=2(8-1) - 1=2(n-1) - 1。纯小数的取值范围是-1 ~ 1,因为原码与反码有2个0(即-0、+0)所以正负小数都可以等于0

  补码的取值范围:

类型 取值范围
正整数 0 <= x <= 2(n-1) - 1
负整数 -2(n-1) <= x <= 0
正小数 0 <= x < 1
负小数 -1 <= x < 0

  同样记实例。针对机器字长为8位(即n=8)的带符号纯整数x,其取值范围是-128~127,即-128 = -27 -(28-1) = -(2n-1),127= 128-1=27-1=2(8-1) - 1=2(n-1) - 1。纯小数的取值范围是-1 ~ 1,但补码只有1个0(即+0),所以负小数小于0,可以等于-1。

  移码的取值范围:

类型 取值范围
纯整数 -2(n-1) <= x < +2(n-1)
纯小数 -1 <= x < 1

  移码公式不分正负数。

3、原码、反码、补码与移码公式

  针对正数(正整数与正小数),原码、反码与补码的表示是一样的。
  针对机器字长为n的负数(负整数与负小数):

码制 类型 公式 取值范围
原码 正整数 x 0 <= x <= 2(n-1) - 1
负整数 2(n-1) + |x| - (2(n-1) - 1) <= x <= 0
正小数 x 0 <= x < 1
负小数 20 + |x| - 1 < x <= 0
反码 正整数 x 0 <= x <= 2(n-1) - 1
负整数 2n -1 + x - (2(n-1) - 1) <= x <= 0
正小数 x 0 <= x < 1
负小数 2 - 2-(n-1) + x - 1 < x <= 0
补码 正整数 x 0 <= x <= 2(n-1) - 1
负整数 2n + x - 2(n-1) <= x < 0
正小数 x 0 <= x < 1
负小数 2 + x - 1 <= x < 0
移码 纯整数 2(n-1) + x -2(n-1) <= x < 2(n-1)
纯小数 1 + x - 1 <= x < 1

  记忆方法:(机器字长n=8)
  1、对于原码负数,符号位取1,即1000 0000。若1000 0000为整数,其值为27=2n-1,若为小数,其值为20,最后加上|x|即可。
  2、对于反码负数,符合位取1,数值位取反,即1111 1111,若1111 1111为整数,其值为255=2n-1,若为小数,其值为21-2-7=2-2-(n-1),最后加上x即可。
  3、对于补码负数,符合位取1,数值位取反,再加1,即1 0000 0000,若1 0000 0000为整数,其值为256=2n,若为小数,其值为2,最后加上x即可。
  4、对于移码,其公式与原码负整数和负小数公式相似,但移码取x,原码取|x|。

猜你喜欢

转载自blog.csdn.net/qq_34801642/article/details/88173584
今日推荐