zoukankan      html  css  js  c++  java
  • 位运算

    原码  反码  补码

    注意的规则:

    01.整数的三个码都是一致的,不需要转换

    02.负数必须转换成补码才能运算

    03.计算机真正参与运算的是  补码

    04.在java中所有的数字嗾使有符号的     符号位 0==》 整数  1==》负数

    05.符号位就是最高位也是最左边的一位

    06.负数的反码=符号位不变+其他位取反(1变0  0变1)

    07.负数的补码=反码+1

    3 - 2 =1  写出过程
    
    1.先找出3的补码  因为3是正数,补码和原码一致
    
    0 0 0 0   0 0 0 0   0 0 0 0   0 0 1 1  ==》3的补码
    
    2.找到-2的补码  先找到-2的源码
    
        1 0 0 0   0 0 0 0   0 0 0 0   0 0 1 0  ==》 -2的源码  不能参与运算 需要转换成 反码
        1 1 1 1   1 1 1 1   1 1 1 1   1 1 0 1  ==》 -2的反码 也不能参与运算 需要转换成补码
        1 1 1 1   1 1 1 1   1 1 1 1   1 1 1 0  ==》 -2的补码  参与运算了
    +   0 0 0 0   0 0 0 0   0 0 0 0   0 0 1 1  ==》 3的补码
    ===================================================================
        0 0 0 0   0 0 0 0   0 0 0 0   0 0 0 1 
    ===================================================================
     1*2的0次方        ===》位置数字*进制的下标次方                            

    算数的右移和算数的左移

    算数的右移 >>:

    01.符号位不变

    02.低位溢出删除

    03.高位补零!

    10 >> 1   10的2进制数字  右移一位 
    
    >>:位移的方向
    1 :位移的位数
    
    
    首先找到10的2进制
    
          0 0 0 0   0 0 0 0   0 0 0 0   1 0 1 0      ====》10的2进制
    >>1     0 0 0   0 0 0 0   0 0 0 0   0 1 0 1 0    ====》右移1位的结果
    ==================================================================
          0 0 0 0   0 0 0 0   0 0 0 0   0 1 0 1      ==》5
    
    
    -1 >> 1
    首先找到-1的2进制
           1 0 0 0   0 0 0 0   0 0 0 0   0 0 0 1    ==>-1的2进制  原码
           1 1 1 1   1 1 1 1   1 1 1 1   1 1 1 0    ==>-1的2进制  反码
           1 1 1 1   1 1 1 1   1 1 1 1   1 1 1 1    ==>-1的2进制  补码      
    >> 1     1 1 1 1   1 1 1 1   1 1 1 1   1 1 1 1
    ================================================================
           1 1 1 1   1 1 1 1   1 1 1 1   1 1 1 1    ===》-1的补码
           1 1 1 1   1 1 1 1   1 1 1 1   1 1 1 0    ===》-1的反码
           1 0 0 0   0 0 0 0   0 0 0 0   0 0 0 1    ===》原码  -1   

    算术左移   <<:

    01.符号位不变

    02.高位溢出删除

    03.低位补零

    1 << 4
    
                0 0 0 0   0 0 0 0   0 0 0 0   0 0 0 1     ===》1的补码
      0 0 0 0   0 0 0 0   0 0 0 0   0 0 0 1 
    ========================================================================
                0 0 0 0   0 0 0 0   0 0 0 1   0 0 0 0     ==>结果16

    逻辑右移,没有逻辑左移    >>>:

    01.不管符号位

    02.低位溢出删除

    03.高位补零

    -1 >>> 1   -1逻辑右移1位
    
          1 0 0 0   0 0 0 0   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的反码
          1 1 1 1   1 1 1 1   1 1 1 1   1 1 1 1     ===》-1的补码
    >>> 1============================================================      
          0 1 1 1   1 1 1 1   1 1 1 1   1 1 1 1     ===》-1的逻辑右移1位
          
    2147483647  int类型的最大值

    位运算 :  &    |    ^    ~

    01. & 按位与  :两位都是1,结果是1

     3&4 
      
        0 0 0 0   0 0 0 0   0 0 0 0   0 0 1 1 
    &   0 0 0 0   0 0 0 0   0 0 0 0   0 1 0 0 
    ===========================================
        0 0 0 0   0 0 0 0   0 0 0 0   0 0 0 0 

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

      3|4
      
        0 0 0 0   0 0 0 0   0 0 0 0   0 0 1 1 
    |   0 0 0 0   0 0 0 0   0 0 0 0   0 1 0 0 
    ===========================================
        0 0 0 0   0 0 0 0   0 0 0 0   0 1 1 1 

    03.^ 按位异或 :两位必须一个为0,一个为1,结果才是1

     3^4
      
        0 0 0 0   0 0 0 0   0 0 0 0   0 0 1 1 
    ^   0 0 0 0   0 0 0 0   0 0 0 0   0 1 0 0 
    ===========================================
        0 0 0 0   0 0 0 0   0 0 0 0   0 1 1 1 

    04.~ 按位取反,只能是一个表达式

            按位取反结果等于该数的相反数减1

           ~3  ====》-4(-3-1=-4)

  • 相关阅读:
    JAVA面试常见问题之开源框架和容器篇
    JAVA面试常见问题之Redis篇
    JDK8日期时间操作小汇总
    JAVA面试常见问题之数据库篇
    JAVA面试常见问题之设计模式篇
    JAVA面试常见问题之锁机制篇
    JAVA面试常见问题之进程和线程篇
    JAVA面试常见问题之常见集合篇
    JAVA面试常见问题之基础篇
    洛谷P1315 观光公交
  • 原文地址:https://www.cnblogs.com/liutianci/p/8125388.html
Copyright © 2011-2022 走看看