首页 > 代码库 > 补码理解

补码理解

关于补码的理解

1.理解周期:

    以时间为例,12小时制,13点就代表了1点。对于处于3点的位置如何移动到8点?

  1.顺时针移动5个点位。3 + 5 = 8

  2.逆时针移动7个点位。3  - 7 = 8

 

2.加法减法:

    在一个周期计数体制里进行减法可以归并为加法,以上述例子为准:3-7=3+5

  推导过程:3-7 = 3-7 + 12 = 3 + (12-7) = 3+5

    所以在进行减法计算时被减数可以存储为:(周期数-被减数)

 

3.关于补码:

    为什么要以补码存储负数,如何让符号位参与运算?

    计算机在表示整数时,必然以有限的字节表示,所以其本质还是一个周期的计数体制。

    以1个字节为例,其周期数为:1,0000,0000 (从0000,0000到1111,1111共1,0000,0000个数)

    需要解决的问题:x+(-y)如何计算,此处x,y均表示正数,问题可以归为-y如何存储。

    借用2的结论,x+(-y) = x + (1,0000,0000-y)

    1,0000,0000-y = 1111,1111-y + 1 = y每位取反 + 1

    此处即回归到负数补码的计算: 负数补码 = 正数每位取反 + 1 = 负数原码去符号位每位取反 + 1

 

4.继续探讨:

    可能你会想1个字节的最高位为1怎么办?那对应补码最高为就为0了?

    答:由于是存储有符号整数,所以需要区分正负。如何区分呢?那就是最高位数字了。

   

补码理解