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

  • 相关阅读:
    《数据结构》树与二叉树
    C/C++ 一点笔记(1)
    c#中隐藏基类方法的作用
    VS2010 灵活运用快捷操作功能(新手必看)
    C# 之类复制 MemberwiseClone与Clone(深 浅 Clone)
    DLL笔记
    批处理文件
    .NET Remoting(一)
    MSI安装数据库
    关于用户角色权限的一点想法(RBAC)
  • 原文地址:https://www.cnblogs.com/zhanghuizong/p/8983310.html
Copyright © 2011-2022 走看看