计算机理论:原码、反码、补码与移码公式记忆方法(个人总结)

计算机理论:原码、反码、补码与移码公式记忆方法(个人总结)


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的负数(负整数与负小数):

码制类型公式取值范围
原码正整数x0 <= x <= 2(n-1) - 1
负整数2(n-1) + |x|- (2(n-1) - 1) <= x <= 0
正小数x0 <= x < 1
负小数20 + |x|- 1 < x <= 0
反码正整数x0 <= x <= 2(n-1) - 1
负整数2n -1 + x- (2(n-1) - 1) <= x <= 0
正小数x0 <= x < 1
负小数2 - 2-(n-1) + x- 1 < x <= 0
补码正整数x0 <= x <= 2(n-1) - 1
负整数2n + x- 2(n-1) <= x < 0
正小数x0 <= 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|。

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值