1、逻辑运算:与/或/非 && || !
2、短路运算
package operator;
public class Demo03 {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a && b:"+(a&&b)); //逻辑与
System.out.println("a || b:"+(a||b)); //逻辑或
System.out.println("!a && b:"+!(a&&b)); //逻辑非
//短路运算
int c = 5;
boolean d = (c<4)&&(c++<4); //因为c<4结果是false,所以不会执行后面的c++,所以c的值还是5
System.out.println(d);
System.out.println(c); //输出5
//与短路运算的对比
int m = 5;
boolean n = (m>4)&&(m++<4); //因为m>4结果是true,所以会执行后面的m++,所以m的值是5+1=6
System.out.println(n);
System.out.println(m); //输出6
}
}
3、位运算:效率高,是直接和底层打交道
&,|,^,~,>>,<<,>>>
package operator;
public class Demo04 {
public static void main(String[] args) {
/*
A = 0011 1100
B = 0000 1101
A&B: A与B A与B上下比较,如果两个对应位都为1就是1,否则就是0 结果是0000 1100
A|B:A或B A与B上下比较,如果两个对应位都为0就是0,否则就是1 结果是0011 1101
A^B:抑或 A与B上下比较,如果两个对应位都相同则为0,否则就是1 结果是0011 0001
~B:取反 和B完全相反 结果是1111 0010
面试题:如果快速计算出2*8=16的结果 也就是2*2*2*2
<< 左移
>> 右移
补充二进制:
0000 0000:0
0000 0001:1
0000 0010:2
0000 0011:3
0000 0100:4 (2往左移一位变成4)
0000 1000:8 (4往左移一位变成8)
0001 0000:16 (8往左移一位变成16)
结论:左移就相当于吧数字乘2,右移就是除2
*/
System.out.println(2<<3);
}
}