• 原码,补码,反码


    计算机中所有的数据运算和数据存储都是补码的形式。

    正数的原码,反码,补码都相同

    负数的原码符号位为1(标识为负数),反码是对其原码逐位取反(符号位除外)

    负数的补码通过在其反码的末尾加1得到

    为甚采用补码计算呢?

    由于计算机计算是在cpu中进行的,cpu中只有加法器,没有减法器,没法直接做减法运算,

    我们知道,负数的表示符号位是1,(而补码的设计就是为了让符号位也参与运算)符号位同样参与运算

    例如:9 - 2 = 9 + (-2)

    原码:9   0000 1001

       -2  1000 0010

    +              1000 1011 (-1)

    反码: 9  0000 1001

       -2  1111 1101

              +(1)0000 0110   (6)

    补码:9 0000 1001

              -2 1111 1110

             +(1)0000 0111   (7)

    可以看到,通过补码运算得到了想要的结果。

    为什么要这要设计补码呢?(或者说补码设计的原理什么呢?)

    9 - 2 = 9 + (-2)

    例如字长为8,8个二进制位共可以表示2^8(256)个数字,包括符号位

    表示范围0-->127(0111 1111)-->-128(1000 0000)-->-1(1111 1111)-->0(补码表示)

    -128(1000 0000),符号位为1,转换成原码(减1取反)(0111 1111)-->(1000 000)

    (1000 0000)好像是-0;事实上-128没有原码和反码(8位)(计算机中规定-128补码为1000 0000),计算时扩展为16位来计算(1000 0000 1000 0000);

    可以看出数值变化是0-->max-->min-->-1-->0;

    所以通过同余,可知-128 = 128(mod 256);

    比如时钟模为12,顺时针转动为加,逆时针为减,那么9+2=11 (9 - 10 = 11)

    即2mod12=2;-10mod12=9;--> 2 = -10  (mod12)(就像到8位二进制溢出一位从max到min重新开始)。

    (写的有点乱,。。。。。)

  • 相关阅读:
    Groovy基本语法
    利用IntelliJ IDEA创建第一个Groovy工程
    创建maven或者Gradle项目的时候GroupId和ArtifactId以及Version是什么意思?
    使用IDEA2017创建java web +maven项目
    Eclipse集成Tomcat的步骤,我已测试N次都是成功的
    访问 Tomcat支配项目去除项目名和端口号通过IP地址(或域名)访问
    SSM框架原理,作用及使用方法
    SpringMVC整合Shiro权限框架
    svn过滤文件配置
    svn
  • 原文地址:https://www.cnblogs.com/zynevergiveup12/p/11145886.html
Copyright © 2020-2023  润新知