其实吧,在我们学习C语言中会遇到好多令人头疼的问题,比如说,原码,反码,补码。看见很简单的三个词,可是真正理解起来会非常的麻烦,那么我在这里就跟大家一起来重新学习一下原码,反码,补码。

    首先让我们弄明白,什么是原码,什么是反码,什么是补码,要想学会这个,我们首先要弄明白他们的定义。

    所谓的原码,就是指有符号的整数的二进制。原码本身简单一易懂在这里就不做过多的解释

    例如:

    00000001=1

    10000001=-1

    反码,就是把原码的符号位不变其余的位进行取反。最高位还是一样,当为1的时候是正,当为0的时候是负。对于正数来说,正数的反码跟原码是相同的,对于负数来说,符号位是保持不变其余位置进行取反操作,

    例如:

    正数100的原码为:01100100 则100的反码也为:01100100

    负数100的原码为:11100100 则它的反码为:10011011

    此时需要注意:0也有两种表现形式。

    说起来反码理解相对而言还算简单,那么接下来让我们继续学习补码

    补码,对于正数来说,补码跟原码是相同的,对于负数而言,符号位还是保持不变,其数值位x的据对峙取反后再最低位+1。在计算机中的储存都是用补码来处理的

    例如:

    +9的原码是:00001001 +9的反码为00001001 +9的补码为00001001

    -9的原码是:10001001 -9的反码为11110110 -9的补码为11110111

    注意:在补码中0有唯一的编码。

    补码的绝对值之为真值;

以上呢,为原码、反码、补码的简单介绍,综上所述我们对于原码、反码、补码的理解,我认为是相当简单了,那接下来我们看一下他们在实际中的应用,大部分为举例分析

    原码的符号位不能直接参与运算,必须和其他位分开。在原码的具体定义中还分为小数和正数

    1.小数原码的定义

    +0.1011的原码就是0.1011    -0.1011的原码就是 1.1011

    2.正数原码的定义(略 前面提起过)

    注意,在小数原码的定义时候,代码中的小数点并不会出现在机器内部

    反码

    在上面提到的数0的反码有两种形式

    如下:

    +0的反码为:00000000

    -0的反码为:11111111

    八位二进制反码的表示范围为-128~+127

    补码

    在补码中,我们会提到模,那么什么叫做模呢?

    模的定义:把一个计量单位称之为模或者模数。例如,时钟是以12进制计数循环的,即以12为模。利用模的概念可以把计算的减法变为加法。同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为8),因此它的运算也是一种模运算。当计数器计满8位也就是256个数后会产生溢出,又从头开始计数。产生溢出的量就是计数器的模,显然,8位二进制数,它的模数为2^8=256。在计算中,两个互补的数称为“补码”

    补码在微型机中是一种重要的编码形式,请注意:

    1.采用补码后,可以方便的将减法运算转化成加法运算,运算过程得到简化。

    2.与原码、反码不同,数值0的补码只有一个,即000000000B

    3.若字长为8位,则不吗所表示的范围为-128~127;进行补码运算时,应注意所得到结果不应超过补码所表示数的范围

    下面我们进行一个简单的转化案例:

    已知原码,求反码跟补码,原码为10110110B,求出反码和补码

    有已知可以知道10110110B为一个负数

    则反码为11001001B

    它的补码就为11001010B(从末端+1的到补码)