关于补码的补充说明

2019-04-13 13:01发布

关于补码的补充说明

  1. 时钟类比
    时钟的计量范围是0 ~ 11, 表示12个数,模 = 12
    [2]=2=122=10[-2]_{补} = 模 - |-2|= 12 - |-2| = 10
    “模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可以化减法为加法运算。
    “-2点”和10点为互补关系。"-2"点的补码是10点。
    10 + 3 = 13点,执行加法运算,表示1点(13/10的余数)。
    -2 + 3 = 1点,执行减法运算。
    因此加法运算与减法运算的效果是一样的。
    以12为模的时钟中,1和11, 2和10, 3和9, 4和8, 5和7, 6和6均有一个共同的特性,就是二者相加等于模,互为补数关系。
  2. 8比特数值编码
    8比特编码表示数值的范围是0X00 ~ 0XFF, 表示282^8个数,模 = 282^8。它表示的最大数是0XFF, 就是1111 1111, 如果再加1,成为1 0000 0000,因为只有8位,最左端的1自然丢失,回到0X00.
    负数的补码 = 282^8 - 该数的绝对值
    = 0XFF + 0X01 - 该数的绝对值
    = 0XFF - 该数的绝对值 + 0X01
    = 负数的反码 + 1
  3. 结论
    (1) 正数: 原码 = 反码 = 补码 = 符号位为0,其他位表示数的绝对值
    (2) 负数: 原码 = 符号位为1,其他位表示数的绝对值。补码 = 反码+1,反码 = 符号位不变,其他位按位取反
    (3) 补码是可逆的,即再对补码求补得到原码。
    (4) 对于有符号数,机内存储数值的补码。
    采用补码运算具有如下两个特征:
    (a) 因为使用补码可以将符号位和其他位统一处理,同时,减法也可以按加法来处
    理,即如果是补码表示的数,不管是加减法都直接用加法运算即可实现。
    (b)两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
  4. 8比特编码特例
    - 统一正负0
    [+0]=(0000 0000)2[+0]_{原码} = (0000 0000)_2
    [0]=(1000 0000)2[-0]_{原码} = (1000 0000)_2
    都是0,但是原码不同,补码相同都是0.
    [10000000]=[1000 0000]+1[1000 0000]_{补} = [1000 0000]_{反} + 1
    =1111 1111+1=(1)0000 0000=0000 0000= 1111 1111 + 1 =(1)0000 0000 = 0000 0000
    最高位溢出。
    - 规定:
    [1000 0000]=[1000 0000]=128[1000 0000]_{补} = [1000 0000]_{原码} = -128
    - -1和+1的补码
    [1]=[10000000]=1111 1110+1=1111 1111=0XFF[-1]_{补} = [1000 0000]_{补} = 1111 1110 + 1 = 1111 1111 = 0XFF
    [+1]+[1]=0000 0001+1111 1111=0000 0000[+1]_{补} + [-1]_{补} = 0000 0001 + 1111 1111 = 0000 0000 最高位溢出
    - +127和-127的补码
    [+127]=(0111 1111)=0X7F[+127]_{补} = (0111 1111) = 0X7F
    [127]=(1111 1111)+1=1000 0000=0X80[-127]_补 = (1111 1111) _反 + 1 = 1000 0000 = 0X80
    - 8比特编码表示数值范围
    -127 ~ 127在加上规定-128, 表示范围成为-128 ~ 127, 即27271-2^7至2^7-1