• 计算机中数字的二进制存储形式


    今天,做个关于二进制的算法题,突然有个问题一直想不通为什么~5是6,计算机基础知识不过关啊,所以现在来弥补下,正数和负数在计算机中是怎么存储和计算的。

    讲讲计算机中的存储形式:

    计算机中存储的数都是以补码的方式存储的,而正数的原码,反码,补码都是一样的。但是负数的原码,反码,补码是不一样的。

     

     

    下面都是以java中的int i=5为例。

     

    正数5的原码就是其二进制码:00000000 00000000 00000000 00000101

                反码是:00000000 00000000 00000000 00000101

         补码是:00000000 00000000 00000000 00000101

    -5的原码是:10000000 00000000 00000000 00000101;

          反码是:11111111 11111111 11111111 11111010;//除符号位所有位取反

          补码是: 11111111 11111111 11111111 11111011;//反码加1

     

    那么java中~5是怎么计算的?

    ~5的补码:

      原码:00000000 00000000 00000000 00000101

          取反得补码:11111111 11111111 11111111 11111010

    求~5的原码:由上面的补码的反码:11111111 11111111 11111111 11111001

               取反得原码:10000000 00000000 00000000 00000110;//也就是-6

     

    计算机中的计算都是以补码的形式进行计算的:

    -5的补码是: 11111111 11111111 11111111 11111011

    1的补码是:00000000 00000000 00000000 00000001

    那么-5+1就是:

                         

          11111111 11111111 11111111 11111011
    +    00000000 00000000 00000000 00000001
           11111111 11111111 11111111 11111100                                                          

     

    11111111 11111111 11111111 11111100是计算机中的补码,减1转换为反码是:11111111 11111111 11111111 11111011,取反得原码是:10000000 00000000 00000000 00000100;

    补充一点:

    二进制的减法:

    0-0=1-1=0 
    1-0=1
    0-1=1(向高位借位)
      1 1 0 0 0 0 1 1  
    -  0 0 1 0 1 1 0 1
    -------------------
      1 0 0 1 0 1 1 0
  • 相关阅读:
    jquery tmpl 详解
    freemarker 类型转换
    关于JQuery的绑定方法
    Jquery的extend方法
    Java高级特性之枚举
    runtime.getruntime.availableprocessors
    Log4J的使用
    JAVA关于一些变量的技巧
    Idea  调试代码
    java设计模式-State(状态)模式
  • 原文地址:https://www.cnblogs.com/loren-Yang/p/7513895.html
Copyright © 2020-2023  润新知