短路:两个符号–达到判断条件时,右边的算不算都行
长路(或者称作逻辑):一个符号–计算时一定会两个都算
与(&)
短路与(&&) 和 长路与/逻辑与 (&)
与 | 左 | 右 | 结果 |
---|---|---|---|
不区分长短 | 真 | 真 | 真 |
不区分长短 | 真 | 假 | 假 |
短路与 | 假 | 不算 | 假 |
长路与 | 假 | 计算 | 假 |
短路与:
若左边的已经为假了,右边则不会运算
(有一个为假就一定是假了,右边算不算都无所谓了就不算了)
长路与:
不管左边是否为假,右边的运算都会执行
或(|)
短路或(||) 和 /逻辑或(|)
或 | 左 | 右 | 结果 |
---|---|---|---|
短路或 | 真 | 不算 | 真 |
长路或 | 真 | 计算 | 真 |
不区分长短 | 假 | 假 | 假 |
不区分长短 | 假 | 真 | 真 |
短路或:
若左边的已经为真了,右边则不会运算
(有一个为真就一定是真,右边算不算都无所谓了就不算了)
长路或:
不管左边是否为真,右边的运算都会执行
int a = 3;
boolean b = a>4 && (++a)>3;
System.out.println(a); // 3
boolean c = a>4 & (++a)>3;
System.out.println(a); // 4
boolean d = a>3 || (++a)>3;
System.out.println(a);//4
boolean e = a>3 | (++a)>3;
System.out.println(a);//5
位运算
A = 0101 0011
B = 0111 0110
A&B = 0101 0010 //与
A|B = 0111 0111 //或
A^B = 1101 1010 //异或
~B = 1000 1001 //非
// 移动
<< // 左移,相当于*2
>> // 右移,相当于/2
位运算可以高效进行计算