位运算总结

作者: vkengr | 来源:发表于2016-12-30 14:23 被阅读116次

    一、数据类型的位数

    sizeof( byte ) == 8       
    sizeof( boolean ) == 8      
    sizeof( short ) == 16      
    sizeof( int ) == 32       
    sizeof( long ) == 64       
    sizeof( float ) == 32       
    sizeof( double ) == 64       
    sizeof( char ) == 16
    

    二、位运算符

    << 左移位,在低位处补0
    >> 右移位,若为正数则高位补0,若为负数则高位补1
    >>> 无符号右移位,无论正负都在高位补0
    & 与(AND)
    | 或(OR)
    ~ 非(NOT)//一元运算符
    ^ 异或(XOR)
    <<= 左移位赋值
    >>= 右移位赋值
    >>>= 无符号右移位赋值
    &= 按位与赋值
    |= 按位或赋值
    ^= 按位异或赋值。
    

    三、常用计算

    1. 判断int型变量a是奇数还是偶数
    a&1  == 0 //偶数      
    a&1 ==  1 //奇数
    
    1. 求平均值
    // 直接求(x + y) / 2,x+y可能超过int的最大范围 
    int x、y;
    int mid = (x&y)+((x^y)>>1); 
    
    1. 对于一个大于0的整数,判断它是不是2的几次方
    ((x&(x-1))==0)&&(x!=0); 
    
    1. 两个数字互换
    x ^= y;     
    y ^= x;     
    x ^= y; 
    
    1. 求绝对值
        int abs( int x )    {      
            int y ;      
            y = x >> 31 ;     
            return (x^y)-y ;   
        }
    //或者
         (x+y)^y 
    
    1. 取模运算
    //a % (2^n)
    a & (2^n - 1)
    
    1. 乘法运算
    //a * (2^n)
      a << n
    
    1. 除法运算
    //a / (2^n) 
    a>> n 
    
    1. 求相反数
    (~x+1)
    
    1. 求a % 2
    a & 1
    

    四、其它

    1. 最大的int型数字
    // 2^31 - 1
    // 011111111111111111111111111111111
    1 << 31 - 1 == 2147483647
    
    1. 最小的int型数字
    // 2^31
    // 10000000000000000000000000000000
    1 << 31 == -2147483648
    
    1. 1和0和-1
    // 00000000000000000000000000000001
    // 00000000000000000000000000000000
    // 111111111111111111111111111111111
    
    1. b与B
    B表示Byte,字节
    b表示bit,比特
    1B = 8bit
    1Kb = 128B
    

    相关文章

      网友评论

        本文标题:位运算总结

        本文链接:https://www.haomeiwen.com/subject/vzemvttx.html