java中的 | & ^ << >> >>> 运算符
运算符 '|' '&' '^'
| :两个二进制对应位都为0时,结果等于0,否则结果等于1;
& :两个二进制的对应位都为1时,结果为1,否则结果等于0;
^ :两个二进制的对应位相同,结果为0,否则结果为1。
具体代码如下:
public static void t1() {
int a = 5; // 0000 0101
int b = 3; // 0000 0011
System.out.println("a=" + a + " 对应二进制:" + Integer.toBinaryString(a) + " b=" + b + " 对应二进制:" + Integer.toBinaryString(b));
System.out.println("a|b=" + (a | b) + " 对应二进制:" + Integer.toBinaryString(a | b));
System.out.println("a&b=" + (a & b) + " 对应二进制:" + Integer.toBinaryString(a & b));
System.out.println("a^b=" + (a ^ b) + " 对应二进制:" + Integer.toBinaryString(a ^ b));
}
执行结果
运算符 '>>' '>>>' '<<'
>> 表示右移,如果该数为正,则高位补0,若为负数,则高位补1; a >> b相当于 a 除以 2的b次方
>> 表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。
<< 表示左移,低位补0 a << b相当于 a 乘以 2的b次方
代码演示:
public static void t2() {
//为正数
int a = 9; // 0000 1001
int b = 2;
System.out.println("a=" + a + " 对应二进制:" + Integer.toBinaryString(a) + " b=" + b);
System.out.println("a>>b=" + (a >> b) + " 对应二进制:" + Integer.toBinaryString(a >> b));
System.out.println("a<<b=" + (a << b) + " 对应二进制:" + Integer.toBinaryString(a << b));
System.out.println("\n\n");
//为负数
a = -2;
b = 2;
System.out.println("a=" + a + " 对应二进制:" + Integer.toBinaryString(a) + " b=" + b);
System.out.println("a>>b=" + (a >> b) + " 对应二进制:" + Integer.toBinaryString(a >> b));
System.out.println("a<<b=" + (a << b) + " 对应二进制:" + Integer.toBinaryString(a << b));
System.out.println("\n\n");
//当a为负数时>> 与 >>>才有区别
System.out.println(">> 与 >>> 的区别");
a = -2;
System.out.println("a=" + a + " 对应二进制:" + Integer.toBinaryString(a) + " b=" + b);
System.out.println("a>>b=" + (a >> b) + " 对应二进制:" + Integer.toBinaryString(a >> b));
System.out.println("a>>>b=" + (a >>> b) + " 对应二进制:" + Integer.toBinaryString(a >>> b));
}
执行结果: