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); }
}
`