逻辑运算符
&&与运算符,同为true结果为true
public class Demo5 {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
boolean c = true;
System.out.println(a&&b);//false a为true b为false
System.out.println(a&&c);//true a为true c为true
}
}
&&与运算中的短路运算
如果在&&运算中第一个结果为false,直接返回false后面程序不执行
public class Demo5 {
public static void main(String[] args) {
int a = 5;
boolean d = (a<4)&&(a++<5);
System.out.println(d);//false
System.out.println(a);//5 因为a<4为false所以d直接为false(a++)程序没有执行
}
}
||与运算,同false 为false
public class Demo5 {
public static void main(String[] args) {
boolean a = false;
boolean b = true;
boolean c = false;
System.out.println(a||b);//true a为false b为true
System.out.println(a||c);//false a为false c为false
}
}
!(a&&b) /(a||b)取反运算
public class Demo5 {
public static void main(String[] args) {
boolean a = false;
boolean b = true;
boolean c = false;
System.out.println(a&&b);//false
System.out.println(!(a&&b));//true
System.out.println(a||c);//false
System.out.println(!(a||c));//true
}
}
位运算
&与运算 同为1时为1
A = 0011 1100
B = 0000 1101
A&B=0000 1100
|或运算 同为0时为0
A = 0011 1100
B = 0000 1101
A|B=0011 1101
^异或运算 相同时为0 不同时为1
A = 0011 1100
B = 0000 1101
A^B=0011 0001
~取反运算 0为1 1为0
A = 0011 1100
~A= 1100 0011
B = 0000 1101
~B= 1111 0010
<</>>运算
2乘8怎么运算最快?
public class Demo5 {
public static void main(String[] args) {
System.out.println(2<<3);//16 相当于与2*2*2*2
}
}
原因:
/* 0000 0001 2
0000 0010 4
0000 0100 6
0000 1000 8
0001 0000 16
在二进制中每次向左移(<<)1位乘2
每次向右移(>>)1位除2
*/
2<<3 相当于与2*2*2*2