java位运算符和逻辑运算符理解

  位运算符介绍
    位移运算符是在二进制的基础上对数字进行平移。分为以下三种:    
   
    a<<b 左移 ( 格式:需要移动的数字 <<  要移动的次数)
        把a转换后的二进制所有数字向左移动b次,高位舍弃,低位的空位置补零。(int:32位[byte/short/char移位后自动变成int],long:64位)
        在数字没有溢出,左移n位就相当于乘以2的n次方。若溢出,即超过32位则,取32的模数,33等于移位1次。
        注意移位有可能变成负数:如图( 此处图片错误,应该是 3  << 30)
      
                        
    a>>b 右移
        把a转换后的所有数字向右移动,低位舍弃,高位的空置补零。(正数补零,负数补1
        右移n位,相当于除以2的n次方。当余数为0或1时,不管右移多少值都是0。
    a>>>b 无符号右移
        把a转换后的所有数字向右移动,低位舍弃,高位的空置补零。(无论正负数都补零
 
    十进制转换二进制
        将十进制除以2,余数记录保存,商继续除以2,直到商为零或一。记录的余数集合倒序排列,高位补零就是二进制。如图:
       
 
      负整数转换二进制
       先转换为二进制后,取反(将0变1,1变0,取反前注意补零),然后对取反后的二进制加一,注意这里是满2进1.示例:
       
            
 
 
   二进制转换十进制
      首先将二进制补齐,首位是0则为正数,是1则是负数。
     
        
    负数二进制转换
      将补齐后的二进制 减 1,然后取反,再同上计算。
     
    
 
    逻辑运算符介绍    
      ~ 按位非(NOT)(一元运算  格式: ~a) 
        将a的二进制取反,如:~3  ==》 二进制:11 
                   ==》 补零:00000000000000000000000000000011  
                   ==》 取反:11111111111111111111111111111100 (注意补零)
      & 按位与(AND)(1100 & 0101) 
        两个运算符同时为1,则结果为1,其它都为0; 如:1100 & 0101   ==》0100
      | 按位或(OR) 
        任何一个运算符为1,则结果为1,其它都为0; 如:1100 & 0101   ==》1101
      ^ 按位异或(XOR) 
        两个运算符不一样时,则结果为1,其它都为0;如:1100 & 0101   ==》1001
      &= 按位与赋值 
      |= 按位或赋值 
      ^= 按位异或赋值 
      >>= 右移赋值 
      >>>= 右移赋值,左边空出的位以0填充 
      <<= 左移赋值
    
    扩展
        boolean     1/8字节   = 1bit
        byte       1字节    = 8bit
        char       2字节    = 16bit     = 一个汉字
        short      2字节    = 16bit     = 一个汉字
        int       4字节     = 32bit
        float      4字节    = 32bit
        long       8字节    = 64bit
      double     8字节    = 64bit
        
 
 
    参考链接
posted @ 2015-10-14 10:34  菠萝小生  阅读(247)  评论(0编辑  收藏  举报