zoukankan      html  css  js  c++  java
  • 计算机为什么使用补码数据?

    • 背景
    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

  • 相关阅读:
    Leetcode 191.位1的个数 By Python
    反向传播的推导
    Leetcode 268.缺失数字 By Python
    Leetcode 326.3的幂 By Python
    Leetcode 28.实现strStr() By Python
    Leetcode 7.反转整数 By Python
    Leetcode 125.验证回文串 By Python
    Leetcode 1.两数之和 By Python
    Hdoj 1008.Elevator 题解
    TZOJ 车辆拥挤相互往里走
  • 原文地址:https://www.cnblogs.com/zhanghuizong/p/8983310.html
Copyright © 2011-2022 走看看