原码反码和补码有什么不同? 正数的补码与原码相同吗?

在了解了数据的二进制表示以后,我们可以把任意整数转换为它的二进制码表示
但是在计算机中,我们存储整数没有那么简单,所以我们在本文中介绍三种编码,为我们理解整数在计算机中存储提供帮助 。
1.原码: 原码为我们表示负数提供了一种方式,如果我们只用二进制码来编码的话,我们是无法表示一个负数的,而原码规定了如果一个数是负数,那么它的最高位为1,如果是正数,则它的最高位编码是0 。
这里的最高位是由计算机分配给这个数据的空间决定的(在计算机中,每种数据类型的存储都有一段基本固定的空间,每个空间被分配了不同数量的位),我们这里以8位存储为例(8个二进制位)解释一下原码的意义 。

原码反码和补码有什么不同? 正数的补码与原码相同吗?

文章插图


假设这就是一个计算机的八位存储空间,其中每一位都可以存储1或0 。现在的存储空间里存储了00010011,忽略前导零的话,我们会发现,这里保存了19的二进制码 。
但是我们如果要表示-19的话,我们就需要其他的表达方式了 。
原码规定,我们在二进制码位前加入一个专门表示符号的符号位(往往是存储空间的头位置,即图中的位置1),如果这个符号位为1,那么就将后面的二进制码解释为负数,如果是0,那么就解释为正数 。原码给了我们区别正负数的方法 。
所以-19的原码应该表示为:
原码反码和补码有什么不同? 正数的补码与原码相同吗?

文章插图


这就是原码的表示,非常容易理解,只是在二进制码前加了一个符号位而已 。
2.反码: 反码的概念更加简洁,就是把一段1,0表示的编码按位取反 。
比如11111的反码就是00000,101的反码就是010
3.补码: 补码是另一种既可以表示正数,也可以表示负数的编码方式,方便了计算机存储整数和对整数进行计算,所以在计算机中的应用比较广泛 。
我们都知道一个二进制整数可以表示为:
原码反码和补码有什么不同? 正数的补码与原码相同吗?

文章插图


而补码只是将最高位的权值变为负数,即:
原码反码和补码有什么不同? 正数的补码与原码相同吗?

文章插图


这样的话,如果最高位是1,那么不论后面的位数情况如何,这个数都一定是负数,而这个位如果是0,那么这个数一定是个正数 。
所以我们以这样的定义也可以得到一种可以表示正负的编码方式 。
例如 10011在补码里代表的就是1*-16+1*2+1*1=-13
4.补码和原码的区别: 补码和原码都可以表示正数和负数,那么这两者有什么区别吗?
我们在一个八位的存储空间内,如果这时一个数的编码为:
01111111
此时如果它是原码表示,那么它的十进制数值就是 127
如果它是补码表示,同样的,十进制数值也是127
因为此时最高位(符号位)为0,表示为正数,补码和原码没有什么区别 。
如果我们此时让它加1,数字就会变成:
10000000
此时在原码里,它的十进制数值就是0
但是我们发现,在补码里,它的十进制数值就是-128
如果我们从0开始,依次加1,则原码在到达正数的最大值以后,会变为0,然后变为-1,-2,等等
但是补码在达到正数的最大值以后,会变为负数的最小值,-128,然后再递增为-127,-126等等 。
这就是原码和补码在表示数值时的区别,把一段二进制编码解释为原码或补码往往会得到两个完全不同的数值 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: