二进制中补码的含义

作者: 赵阳_c149 | 来源:发表于2019-07-24 12:18 被阅读3次

    在计算机中,数字用二进制补码来表示和存储。原码和补码这两种表示方法均有符号位和数据位。符号位的含义相同,1表示+,0表示-。而数值位的表示方法并不相同。

    对于整数,原码和补码相同。

    对于负数,得到他的补码需要两步:

    1. 将其原码除符号位外的所有位取反。也就是说0变1,1变0,符号位1不变。
    2. 将1#得到的值+1。

    例如:在8位二进制中,-7的原码为1000 0111

    1. 将其原码除符号位外的所有位取反:
    1111 1000
    
    1. 将1#得到的值+1:
    1111 1001
    
    数字用二进制补码来表示和存储优点:
    1. 补码的补码是原码。也就是说补码和原码相互转换,其运算过程是相同的。
    • 对于正数,无论取补多少次,原码和补码都一样。
    • 对于复数,
      -7的原码为
    1000 0111
    

    补码为

    1111 1001
    

    对其求补:
    将其原码除符号位外的所有位取反:

    1000 0110
    

    将i#得到的值+1:

    1000 0111
    
    2. 加法和减法可以统一处理。

    为了理解这一特性,引入“模”的概念。模是指一个计量系统的计数范围,如时钟。时钟的计量范围是0~11,模=12。同理,如果将n位计算机也看成是一个计量系统,则其计量范围为0~2^n -1,模=2^n。
    “模”实际上是计量器产生“溢出”的量,其值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,都可以化减法为加法运算。
    例如:假设当前时钟指向10点,如果想要将其调到6点,有两种方法:

    倒拨4小时,

    10-4 = 6
    

    顺拨8小时,

    10+8 = 18,18%12 = 6。
    

    也就是说,在以12为模的系统中,加8和减4的效果是一样的,因此凡是减4的运算,都可以用加8来代替。对“模”= 12而言,8和4互为补数。
    将模的概念和方法扩展至n位计算机,模=2n , 相加和为 2n的两个数互为补数,减法问题可以化为加法问题。把补数应用到计算机对数的处理上,就是补码。

    3. 可以将符号位和数值位统一处理。

    例如,需要求 2+ (-1),假设数字用8位二进制表示,那么2的补码是

    0000 0010
    

    -1的补码是

    1111 1111
    

    则有

    0000 0010 + 1111 1111 = 1
    

    这里进位的时候,完全不用考虑符号位和数值位的区别,很大程度的精简了计算步骤。

    4. 0只有一种表示方法。

    取补的具体方法,主要有两种,one’s complement和two’s complement。

    1. one’s complement:
    N = (2^n^ - 1) – N
    

    这种表示方法存在着一个问题,即有两个0。
    正0:

    0000 0000
    

    负0:

    1111 1111
    

    对于正0,很好理解,对于负0,可以考虑1+(-1),
    1的补码

    0000 0001
    

    -1的补码

    1111 1110
    
    0000 0001 + 1111 1110 = 1111 1111
    

    造成了数字表示和存储的冗余甚至混乱。

    1. two’s complement:
    N’ = 2^n^ – N
    

    在one’s complement的基础上改进,取反之后对得到的值+1,消除了负0。

    相关文章

      网友评论

        本文标题:二进制中补码的含义

        本文链接:https://www.haomeiwen.com/subject/thatrctx.html