逻辑运算符
- &&:逻辑与运算符,左右表达式结果为真才为真,否则为假
- ||:逻辑或运算符,左右表达式结果有真即为真,否则为假
- !:逻辑非运算符,对表达式结果取反,表达式为真即为假,为假即为真
boolean a = true;
boolean b = false;
// 左右表达式结果为真才为真,故结果为:false
System.out.println(a && b);
// 左右表达式结果有真即为真,故结果为true
System.out.println(a || b);
// 对表达式结果取反,故结果为false
System.out.println(!a);
短路运算
在使用“&&”时,如果左表达式执行结果为true,则会执行右表达式,如果左表达式执行结果为false,则不再执行右表达式,而是直接返回false。
在使用“||”时,如果左表达式执行结果为false,则会执行右表达式,如果左表达式执行结果为true,则不再执行右表达式,而是直接返回true。
这种类似于惰性的处理方法被称为短路运算。
位运算符
- &:位与运算符,位与位都为1时才为1
- |:位或运算符,位与位有1时就为1
- ~:位非运算符,位为0时为1,位为1时为0
- ^:异或运算符,位与位相等时为1,不等时为0
- <<:左移运算符,将二进制数向左移位,低位补0
- >>:右移运算符,将二进制数向右移位,高位补0
- >>>:无符号右移运算符,将二进制数向右移位,高位补0,符号位也会被移位
// 位与位都为1时才为1,故结果为:2
System.out.println(0b0110 & 0b0011);
// 位与位有1时就为1,故结果为:7
System.out.println(0b0110 | 0b0011);
// 位为0时为1,位为1时为0,故结果为:-7
System.out.println(~0b0110);
// 位与位相等时为1,不等时为0,故结果为:5
System.out.println(0b0110 ^ 0b0011);
// 将二进制数向左移位,低位补0,故结果为:12
System.out.println(0b0110 << 1);
// 将二进制数向右移位,高位补0,故结果为:-3
System.out.println(-0b0110 >> 1);
// 无符号右移运算符,将二进制数向右移位,高位补0,符号位也会被移位,故结果为:2147483645
System.out.println(-0b0110 >>> 1);