笔记:原码 反码 补码
本文最后更新于 386 天前,其中的信息可能已经有所发展或是发生改变。

学习c语言,逃脱不了的就是编码,这篇博客就是来学习下计算机中的原码反码补码,首先就是原码,一开始计算机并不能表示正负,为了让计算机能够表示正负,人们发明了原码,原码的工作原理就是在数字前面再加上一位,用来表示正负,0表示正,1表示负。比如说2这个数字与-2这个数字,可以如如下的方法来表示(具体是多少位可以自己定或看计算机储存位数,2表示为0 010也是可以的,本博客按照总计7位表示):

2: 0 000010

-2: 1 000010

但是这样子表示也有一点问题,当几个通过原码表示的数字开始相加的时候,假如参与运算的都同为正数或都同为负数,那么没问题,但是假如参与运算的既有正数又有负数,那么就会出现问题,如下面所示

都为正数:2+2= 4. 0 000010+0 000010 = 0 000100 = 4

有正有负:2+-2=0. 0 000010+1 000010 = 1 000100 = -4 (不等于-2)

为了处理上面所展示问题 ,人们就发明了补码,但是要从原码转换到补码,先要将原码转换成反码。如下方所述

2 原码 0 000010. 反码 0 000010.

-2 原码 1 000010 反码 1 111101

接下来就是补码了,现在计算机大部分情况都是用补码来进行储存数据的。我们先讲如何将反码转化为补码:

对于正数:原码既是补码

2 补码 0 000010

对于负数:在反码位数后面加一就是补码。

-2 补码1 111110

然后两位数相加

2 + (-2) =0 000010 + 1 111110 = 10 0 0000

会发现多处来了几位,而在计算机中,多处来的那一位被舍去(溢出了,本博文采用7位来表示,所以舍弃最前面的第1位,),就可以计算出 2 + (-2) = 0 000000 =0

我们再计算其他的算式

比如说 37 + (-44)

原码反码补码
37 0 100101 0 100101 0 100101
-441 101100 1 010011 1 010100

37 + (-44) = 0 100101 + 1 010100= 0 1 111001

舍去掉多出来的一位(原本我们在这篇博文中表示的总计7位)即为1 111001 ,将这个补码数字转化为原码,换算过来就是-7,计算完成

总结一下,上面讲述了原码,反码补码之间的运算以及转化,正数的补码就是其原码本身,而负数的原码是将其对应正数按位取反再加 1

补码的发明则是为了将计算机中的减法运算全部转换为加法运算,用来方便计算机运行

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议,记得载明出处,(期待)。 内容有问题?请点此跟我反馈
上一篇
下一篇