原码、反码、补码相关知识

1. 原码

1.1 原码的介绍

原码是一种用于表示有符号整数的表示方式。
原码的最高位用来表示符号,0表示正数,1表示负数,而其余位则表示整数的值。
例如,在一个8位的原码中,+3可以表示为 00000011,-3则表示为 10000011。


1.2 原码的表示

  1. 正数的原码反码补码是其本身(三码合一)。 如 7的原码:0000 0111
  2. 负数的原码符号位为1数值位为其绝对值。 如 -7的原码:1000 0111

若 X = +1110, 则[X] = 0,1110 用逗号隔开 符号位和数值位

若 X = -1110, 则[X] = 1,1110 用逗号隔开 符号位和数值位


1.3 原码的范围

注:1Byte (字节) = 8 bit (位)

在使用 n 位二进制进行原码表示时,原码的范围可以通过以下方式计算:

如果使用 n 位二进制表示原码,其中最高位为符号位,剩下的 n-1 位为数值位,则原码的范围可以计算如下:

对于有符号的原码表示,最高位为符号位,0 表示正数,1 表示负数。
假设 n 位二进制表示中,最高位为符号位,即第 n 位,则有效的数值位共有 n-1 位。

  • 对于无符号整数,n 位二进制可以表示 2^(n-1) 个不同的数值,其范围从 0 到 2^(n-1)-1
  • 对于有符号整数,n 位二进制可以表示从 -(2^(n-1)-1) 到 2^(n-1)-1 的范围,其中最高位为符号位

例如,如果使用 8 位二进制进行原码表示,则有符号整数的范围为 -127 到 127,无符号整数的范围为从 0 到 255。

需要注意的是,由于有一个比特用于表示符号位,因此有符号整数的表示范围比无符号整数小一半


1.4 原码计算的弊端

  1. 加法和减法不统一:在原码表示中,正数和负数的加法、减法操作需要分别处理。在进行加法运算时,需要考虑符号位,并且可能存在溢出或进位的问题。减法运算也需要额外的步骤来处理负数的减法,使得运算相对复杂。

利用原码进行计算的时候,如果是正数完全没有问题;但是如果是负数计算,结果就出错,实际运算的方向跟正确的运算方向是相反的。

在这里插入图片描述

  1. 零的表示不唯一:在原码表示中,零可以有两种表示方式,即正零(0000 0000)和负零(1000 0000)。这样会导致在计算中出现冗余和不一致的情况,增加了处理零的复杂性。

  2. 符号位的处理困难:因为符号位单独存在,并且参与运算,所以在进行运算时需要特殊处理符号位。这不仅使得运算过程更加繁琐,还增加了错误的可能性。

  3. 浪费存储空间:原码表示中,负数的位数较多,会占用更多的存储空间。这样会浪费存储资源,并且增加了数据传输和处理的复杂性。


2 反码

2.1 反码出现的目的

  1. 为了解决原码不能计算负数的问题。
  2. 实现二进制加法:反码的另一个目的是使得二进制加法可以统一进行,无论是正数还是负数。对于使用反码表示的负数,加法运算就变成了非常简单的按位相加操作。这样可以简化计算,减少运算过程中的特殊情况。

2.2 反码的表示

正数的原码反码补码是其本身负数的反码是在原码的基础上,符号位不变。数值位取反,0变1,1变0。有 +0 -0 之分


2.3 常见负数的反码

在这里插入图片描述


2.4 反码的弊端

负数运算的时候,如果结果不跨0,是没有任何问题的,但是如果结果跨0,跟实际结果会有1的偏差。

在这里插入图片描述


3 补码

计算机中的存储和计算都是以补码的形式进行的。


3.1 补码出现的目的

为了解决负数计算时跨0的问题而出现的。


3.2 补码的表示

正数的原码反码补码是其本身,负数的补码在反码的基础上+1。
另外补码还能多记录一个特殊的值-128该数据在1个字节下,没有原码和反码。


3.3 常见负数的补码

在这里插入图片描述

在这里插入图片描述

3.4 补码的优点

唯一的零表示:解决了反码表示中存在的两个零(正零和负零)的问题。

简化运算:补码的加法和减法运算可以通过相同的方式进行,无需额外的特殊处理。这简化了计算机系统中对负数的运算过程。

扩展表示范围:补码能够更有效地表示负数,且不占用额外的位数。它允许使用相同的位数表示更大的数值范围。


4 三码互转

在这里插入图片描述

  1. 原码转反码
    对于正数来说,原码、反码和补码相同,无需转换。
    对于负数,将其原码的符号位保持为 1,其他位按位取反,即可得到其反码。

  2. 反码转原码
    对于正数来说,原码、反码和补码相同,无需转换。
    对于负数,将其反码的符号位保持为 1,其他位按位取反,即可得到其原码。

  3. 反码转补码
    对于正数和零来说,原码、反码和补码相同,无需转换。
    对于负数,将其反码的符号位保持为 1,然后将所有位再加上 1,即可得到其补码。

  4. 补码转原码
    对于正数和零来说,原码、反码和补码相同,无需转换。
    对于负数,将其补码减去 1,并对结果的所有位按位取反,即可得到其原码。

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thanks_ks

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值