zoukankan      html  css  js  c++  java
  • 【软考】(四)原码、反码、补码


    什么是数制?用来表示数值的规则。如十进制。二进制.


    机器数

    用二进制的形式来表示数;最高位为符号位,1表示负数,0表示正数.

    :  1---->00000001;-1---->1000 0001

    真值

    从上面我们知道了机器数是计算机用来表示数的一种形式,可是用于最高位是符号位。

    这样就出现这样情况。1000 0001表示的真正数值为1。而不是129.这样我们把一个机器数表示的真正的实际的意义的值称之为真值。

    原码、反码、补码

    整体上来讲原码反码补码都是计算机本身用来存储数的一种方式。


    原码

    规则:符号位+真值的绝对值

    如:[+1]原码=0000 0001

            [-1]原码=1000 0001

    反码

    规则:正数反码为本身

                负数反码为原码的取反。但符号位不变

    如:[+1]原码=[+1]反码=0000 0001

            [-1]原码=1000 0001=[-1]反码=1111 1110;

     

    补码

    规则:正数补码为本身

                负数补码为原码的反码的基础之上加1

    如:[+1]原码=[+1]补码。

            [-1]原码=1000 0001=[-1]反码=1111 1110=[-1]补码=1111 1111


    为何会出现三种表示方式?


    通过上面三种我们得到正数1在各种情况下都是一致的:[+1]补码=0000 00001

    而反码不是一致的。

     

    在计算机内部。为了将运算变得简单。将符号位也投入到运算之中来,这样不须要计算机去分析符号位的作用。可是我们发现

    [+1]原码=0000 0001+[-1]原码=1000 0001=0000 00001=1;而不是0,这样一来就出现了错误。

    怎样解决问题呢?


    为了解决问题,反码出现了

    [+1]原码+[-1]原码=1000 0001=[+1]反码=0000 0001+[-1]反码=1111 1110=0000 0000(反码)=0000 0000 (原码)=-0


    这样一来攻克了原码之间运算的问题,可是问题又出现了-0=1000 0000(原码)。+0=0000 0000 (原码)。这样在计算机看来不一样。

    是没有意义的。

    [+1]原码+[-1]原码=1000 0001=[+1]补码=0000 0001+[-1]补码=1111 1111=0000 0000(补码)=[0000 0000](原码)

    这样用[0000 0000](原码)表示0就不会出现故障了。



    总的来说,在整数中,原码和补码、反码都是一样的,对于负数反码在符号位不变的情况下各位取反所得。补码为反码基础上加1.而原码补码反码的出现都是为了满足在计算机在运算过程更加简单和便捷而出现的。

     

     

  • 相关阅读:
    vscode的go环境配置
    百度过的问题
    javascript判定两个对象是否相等
    chattr
    kubernetes ingress example
    docker 免 sudo
    build local kubernetes env
    go channel
    rpm install and uninstall
    fluentd v0.12 gem install fluent-plugin-webhdfs error
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7249822.html
Copyright © 2011-2022 走看看