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.