java位运算

105 阅读1分钟

1.与运算符:&

  • 两个操作数中位都为1,结果才为1,否则结果为0(二进制)

    int a=129;
    int b=128;
    System.out.println("ab 与的结果是:"+(a&b));
    ab 与的结果是:128
    
  • Brian Kernighan 算法:x=x & (x−1) 将x的二进制最后一个消去,以此来记录x中1的个数

  • i&(i-1))==0 来判断i是否为2的幂此数

  • i&1 如果i为偶数那么 i&1=0;i为奇数那么 i&1=1

2.或运算符:|

  • 两个位只要有一个为1,那么结果就是1,否则就为0

3.非运算符:~

  • 如果位为0,结果是1,如果位为1,结果是0

4.异或运算符:^

  • 两个操作数的位中,相同则结果为0,不同则结果为1
  • 如:判断数组中只出现一次的数

5.Java中的<< 和 >> 和 >>> :

# <<表示左移,不分正负数,低位补0;

# >>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;   
----例: i>>1消去最低有效位

# >>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0