• 关于计算机中补码的问题


    计算机中的有符号数有三种表示方法,即原码、反码和补码

    三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”;

    而数值位,三种表示方法各不相同。

    在计算机系统中,数值一律用补码来表示和存储

    原因在于,使用补码,可以将符号位和数值域统一处理,同时,加法和减法也可以统一处理。

    接下来,来看一看原码、反码和补码到底是什么,以及它们之间的转换关系。


    原码:

    是一种计算机中对数字的二进制定点表示方法

    原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0 和 -0),其余位表示数值的大小。

    现在用4个bit(也就是1个byte)表示数字1:

    0 0 0 1 (也就是十进制的1)

    因为它是正数,所以它的第一位(也就是它的符号位)是 0,剩下的部分(也就是0 0 1)作为数值进行计算,结果是1。

    那么 -1 怎么表示呢?

    刚刚说到,第一位为符号位,而负数的符号位是1,那么这里的 -1 就可以写成:

    0 0 1 


    反码:

    0以及正数的反码就是其本身,也就是说0的反码还是0,一个正数的反码还是这个正数自身。

    而负数则不同,负数的反码,除了第一位符号位不变(还是 1 ),其余各位取反,这样就得到了它的反码。

    那么 -1 的反码是多少呢?

    1 0 0 1【原码】

    1 1 1 0 【反码】

    解析:001各位取反就是110。


    补码:

    • 对负数的原码取反,再加1,这样就得到了它的补码。
    • 也就是说对负数的反码加1,就得到了它的补码。
    • 正数的补码还是其本身。0的补码还是0。

    还是以 -1 举例子,它的补码是多少呢?

    1 0 0 1【原码】

    1 1 1 0【反码】

    反码加1之后,1110 + 1 = 1111 也就得到-1的补码:

    1 1 1 1【补码】  


    问:在字长为8位的计算机中,-10的原码、反码、补码分别是多少?

    解答:

    (1)10的原码为0000 1010,第一位变为1,得到负数-10。

             1000 1010【原】

             解析:第一位是符号位(-),剩余部分求值:0*2+ 1*2+ 0*2+ 1*2= 0 + 2 + 0 + 8 =  10

    (2)取反得到反码:

        1111 0101【反】

        解析:0变1,1变0。

    (3)加1得到补码:

        1111 0110【补】

        解析:1111 0101 + 1 = 1111 0110


    总结:

    补码是计算机系统存储数据的方式,也就是说它的计算实际上都是以补码的方式进行的。

    我们所输入的指令是我们看得懂的原码,但是输入计算机时,它会自动解析为补码进行运算。

    那么补码的优势在哪里呢?

    第一,解决了符号的表示的问题;

    第二,可以将减法运算转化为补码的加法运算来实现,克服了原码加减法运算繁杂的弊端,可有效简化运算器的设计;

    第三,在计算机中,利用电子器件的特点实现补码和真值、原码之间的相互转换,非常容易;

    第四,补码表示统一了符号位和数值位,使得符号位可以和数值位一起直接参与运算,这也为后面设计乘法器、除法器等运算器件提供了极大的方便。

    总之,补码概念的引入和当时运算器设计的背景不无关系,从设计者角度,既要考虑表示的数的类型(小数、整数、实数和复数)、数值范围和精确度,又要考虑数据存储和处理所需要的硬件代价。

    因此,使用补码来表示机器数并得到广泛的应用,也就不难理解了。

    (本文参考资料:https://baike.baidu.com/item/%E8%A1%A5%E7%A0%81/6854613?fr=aladdin

  • 相关阅读:
    JVM之GC调优
    JVM的栈、堆
    SpringMVC及其HandlerMapping、HandlerInterceptor、HandlerAdapter等组件的原理解析
    静态代理、动态代理和CGLIB,SpringAOP中的代理
    cmd删除文件夹
    vue-router命名视图+路由嵌套
    Vue实现长按事件
    [SparkSQL] hive.exec.max.dynamic.partitions配置不起作用
    Excel分数转为百分数
    Hadoop YARN主资源调度算法
  • 原文地址:https://www.cnblogs.com/buildnewhomeland/p/12127321.html
Copyright © 2020-2023  润新知