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

原码、反码、补码相关知识1 原码 1 1 原码的介绍 原码是一种用于表示有符号整数的表示方式 原码的最高位 用来表示符号 0 表示正数 1 表示负数 而其余位则表示整数的值 例如 在一个 8 位的原码中 3 可以表示为 00000011 3 则表示为 1 2 原码的表示

大家好,我是讯享网,很高兴认识大家。

1. 原码

1.1 原码的介绍

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


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 位为数值位,则原码的范围可以计算如下:

  • 对于无符号整数,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,并对结果的所有位按位取反,即可得到其原码。
小讯
上一篇 2025-01-14 13:54
下一篇 2025-01-12 09:22

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/52771.html