java 位运算

ps: 在java中,负数的二进制为,正数的二进制的反码+1。

左移( << )

  把数字向左移动,比如 <<2,相当于向左移动2位,相当于做了乘法,乘积为2^2。符号位不变。低数位全部用0来补

public static void main(String[] arg) {
    System.out.println(5 << 2);
}

  
  输出为20,相当于5*4=20

右移( >> )

  把数字向右移动,比如 >>2,相当于向左移动2位,相当于做了除法,除了2^2。符号位不变。正数用0补位,负数用1补位。

public static void main(String[] arg) {
    System.out.println(5 >> 2);
}

  输出为1

无符号右移( >>> )

ps:没有无符号左移
  把数字向右移动,比如 >>2,相当于向左移动2位,相当于做了除法,除了2^2。符号位也变。正数没有啥变化,负数的话,变化蛮大的。因为高数位全部都是0来补充。

位与( & )

  将数字转换为2进制后做与运算,每一个数字都要做与运算。2个数进行位与时,将2个数均转换为2进制数,然后按照顺序每一位开始做对应的与运算。均为1才是1,否则,为0.

位或( | )

  将数字转换为2进制后做或运算,每一个数字都要做或运算。2个数进行位或时,将2个数均转换为2进制数,然后按照顺序每一位开始做对应的位或运算。均为0才是0,否则为1.

位非( ~ )

  将数字转换为2进制后做非运算,每一个数字都要做非运算。对这个数字每一位都要进行非运算,也就是取反。

位异或( ^ )

  将数字转换为2进制后做异或运算,每一个数字都要做异或运算。2个数进行异或时,将2个数均转换为2进制数,然后按照顺序每一位开始做对应的异或运算。均为0,或者均为1,才是0,否则为0.