zoukankan      html  css  js  c++  java
  • 二进制的算法

        我们经常听到十进制数和二进制数,在计算机中经常用二进制来计算,怎样才能把我们常见的十进制数转换为二进制数呢?

       这里我们以十进制数68为例,8*10的0次方+6*10的一次方  

                                               45           5*10的0次方+4*10的一次方

                                              145          5*10的0次方+4*10的一次方+1*10的二次方

    计算机中的2进制

    01.原码
    02.反码
    03.补码


    1 byte=8 bit;

    01.java中所有的数字都是有符号! 数字的最高位(最左边的)就是符号位!

    红色标注的为高位 0代表正数  1代表负数

    十进制的1   转换为二进制就是   0 0 0 0 0 0 0 1

    十进制的-1   转换为二进制就是  1 0 0 0 0 0 0 1

    02.正数的原码,反码,补码都是一样的!
    03.负数的反码=符号位不变+其他位取反
    04.负数的补码=反码+1
    反码=补码-1
    05.计算机在运行的过程中 都是以 《补码》 运算的!

    1+1

      0 0 0 0 0 0 0 1

    +     0 0 0 0 0 0 0 1

    -------------------------    逢2进1

           0 0 0 0 0 0 1 0   结果为2    

    -2+1

           1 0 0 0 0 0 1 0    ===》-2的原码   需要转换为反码  

           1 1 1 1 1 1 0 1    ===》-2的反码   需要转换为补码

      1 1 1 1 1 1 1 0    ===》-2的补码   补码才能参与运算

    +     0 0 0 0 0 0 0 1    ===》 1的补码    正数的 原码 反码 补码 都一样

    -------------------------

           1 1 1 1 1 1 1 1    ===》 结果为补码  需要转换为反码  再转换为原码

      1 1 1 1 1 1 1 0    ===》 结果为反码

           1 0 0 0 0 0 0 1    ===》 原码  结果为-1 

    java中的位运算

    01.& :按位与 两位全为1,结果为1

    2&3

    运算过程:
       0 0 0 0 0 0 1 0 ==》2的补码
    & 0 0 0 0 0 0 1 1 ==》3的补码
    ---------------------------------
     0 0 0 0 0 0 1 0 ==》 结果2

    02.| :按位或 两位有一个为1,结果为1

    2|3

    运算过程:
      0 0 0 0 0 0 1 0 ==》2的补码
    | 0 0 0 0 0 0 1 1 ==》3的补码
    ---------------------------------
      0 0 0 0 0 0 1 1 ==》 结果3

    03.~ :按位取反 :所有的0变成1,所有的1变成0 (仅限于一个表达式使用)

    ~3
    0 0 0 0 0 0 1 1 ==》3的补码
    ~
    ---------------------------------
    1 1 1 1 1 1 0 0 负数 这是原码
    1 0 0 0 0 0 1 1 反码

    1 0 0 0 0 1 0 0 补码

    ~-5

    1 0 0 0 0 1 0 1 ==》 -5的源码
    1 1 1 1 1 0 1 0 ==》 -5的反码
    1 1 1 1 1 0 1 1 ==》-5的补码
    ~
    ----------------------------------
    0 0 0 0 0 1 0 0 ==》 4

    04. ^ :按位异或 两位一个是1一个是0,结果才是1

    2^3
    0 0 0 0 0 0 1 0
    ^ 0 0 0 0 0 0 1 1
    -----------------------------
    0 0 0 0 0 0 0 1 ==>!



    算术右移:符号位不变 ,低位溢出

    10 >> 2

    0 0 0 0 1 0 1 0
    0 0 0 0 1 0 1 0
    --------------------------------
    0 0 0 0 0 0 1 0

    算术右移:符号位不变 ,低位补0
    2 << 2

    0 0 0 0 0 0 1 0
    0 0 0 0 0 0 1 0
    ---------------------------
    0 0 0 0 1 0 0 0 ==》2的三次方

  • 相关阅读:
    mysql replication常见错误整理
    enq: TX
    LOGMNR分析redo log和archive log教程
    使用create datafile... as ...迁移数据文件到裸设备
    mysql无法启动,报错 Can't start server: can't create PID file: No space left on device
    MYSQL 权限设置查询
    ORA-02437 违反主键
    oracle sequence的用法
    sequence有关问题
    关于Relay Log无法自动删除的问题
  • 原文地址:https://www.cnblogs.com/wqtzhaoqiang/p/7479050.html
Copyright © 2011-2022 走看看