计算机为什么使用补码数据?

  • 背景
  1. 用户存储的数据分为正负数
  2. 最高位为符号位.左边高位右边低位.0:代表正数,1:代表负数
  3. 原码(原始二进制)
  4. 反码
  5. 补码
  • 原码
    +-1
    0000 0001 正1二进制
    1000 0001 负1二进制
    这样子存储看上去貌似没有什么问题................接着举列子

    +-0
    0000 0000 正0二进制
    1000 0000 负0二进制

    通过分析得出结论:
    1.0有两种存储方式
    2.正负数相加结果不对(计算机只会加不会减)

    给出一个等式:1 - 1 = 1 + -1
    +1 ==== 0000 0001
    -1 ==== 1000 0001
    -2 ==== 1000 0010 结果已经不对...

    所以反码因此诞生了....
  • 反码
    1.在原码的基础上符号位不变,其它为取反(0变1,1变0)
    2.正数的原码和反码一样

    继续上面例子
    原码:
    +1 ==== 0000 0001
    -1 ==== 1000 0001
    -2 ==== 1000 0010

    反码:
    +1 ==== 0000 0001
    -1 ====  1111 1110
    -0 ====  1111 1111 结果等于-0.通过反码解决了正负数相加带来的问题.但是0的两种存储方式还没解决................

  • 补码
    1.正数的原码,反码,补码都一样
    2.负数的补码等于反码+1

    反码:
    +1 ==== 0000 0001
    -1 ====  1111 1110

    补码(一个字节存储):
    +1 ====   0000 0001
    -1 ====   1111 1111

     0 ====  10000 0000 导致最高位丢弃实际结果为:0000 0000

posted @ 2018-05-03 00:10  有我在  阅读(338)  评论(0编辑  收藏  举报