本节教学视频链接:https://www.bilibili.com/video/BV12J41137hu?p=29&vd_source=b5775c3a4ea16a5306db9c7c1c1486b5
1.逻辑运算符
&&(与)、||(或)、!(非。
A | B | A&&B | A||B | !A |
0 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 0 |
1 | 1 | 1 | 1 | 0 |
逻辑与运算属于短路运算,既如果第一个操作数能够决定结果,那么就不会对第二个操作数求值。对于逻辑与操作而言,如果第一个操作数是假,则无论第二个操作数是什么值,结果都不可能是真,相当于短路了右边。
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a && b:" + (a&&b)); //输出false 逻辑与运算,两个变量都为true,结果才为true;
System.out.println("a && b:" + (a||b)); //输出true 逻辑或运算,有一个变量为true,结果就为true;
System.out.println("a && b:" + !(a&&b));//输出true 逻辑非运算,如果是flase则为true,如果是true则为false;
//逻辑与运算属于端短路运算
int c = 10;
Boolean d = (c<9)&&(c++<9);//因为(c<9)结果为flase,所以程序就不会再去执行(c++<9);
// 如果执行(c++<9)则c最后的值应该为11,如果没有执行(c++<9)则c最后的值还是10
System.out.println(c);//结果输出10,说明(c++<9)没有被执行;从而直接证明逻辑与运算是短路运算;
System.out.println(d);
2.位运算符
A = 0011 1100 B = 0000 1101 | |
(与)A&B = 0000 1100 | |
(或)A|B = 0011 1101 | |
(异或)A^B = 0011 0001 | |
(非)~B = 1111 0010 | |
与:两个位都为1,结果为1;其他都为0;(两个都为1,结果为1)
或:两个位有一个位为1,结果为1;两个位都为0,结果为0;(有一个为1,结果就为1)
异或:两个位相同,结果为0;两个位不同,结果为1;(相同为0,不同为1)
3.位运算符中的 <<(左移)、>>(右移)
问题:如何在Java中快速的计算 2*8 ?
0000 0000......................0
0000 0001......................1
0000 0010......................2
0000 0011......................3
0000 0100......................4 2向左移动1位,变成4
0000 1000......................8 4向左移动1位,变成8
0001 0000......................16 8向左移动1位,变成16
从而得出结论, <<(左移)1位,相当于乘以2 >>(右移)1位,相当于除以2;
public static void main(String[] args) {
System.out.println(2<<3);//输出16,相当于2*8
}
}