public class Demo05 {
public static void main(String[] args) {
/*逻辑运算符
与,&&,或,||,非,!
有点和高中数学集合里面一部分相似
正确,true,错误,false
*/
boolean a = true;
boolean b = false;
System.out.println("a && b: "+(a&&b));//a && b: false
//逻辑与运算:两个变量都为真,结果才为真true
System.out.println("a || b: "+(a||b));//a || b: true
//逻辑或运算,两个变量有一个或多个为真的,结果就为真true
System.out.println("! (a && b): "+!(a&&b));//! (a && b): true
//如果为真,则变为假,如果为假,则变为真
//短路运算
int c = 5;
boolean d = (c<4)&&(c++<4);
/*程序执行c<4时,发现c<4是错误的
又因为逻辑与运算,只要其中一个为错就为错
所以后面的c++<4程序就不会去执行
*/
System.out.println(c);//5,因为程序并没有执行c++,所以c还是5
System.out.println(d);//false
}
}
位运算,&,|,^,~,>>,<<,>>>
#一般只与二进制有关
A = 0011 1100
B = 0000 1101
A&B = 0000 1100,对应位都为1,此位就为1,否则为0
A|B = 0011 1101,对应如果或多个为1,则此位为1,否则为0
A^B = 0011 0001,如果对应位相同则为0,否则为1
~B = 1111 0010,就是取相反的数
-------------------------------------------------------------------------------------------------------------------------
让计算机计算2*8,计算机不知道是什么意思,可以写成2*2*2*2,计算时每一次都在变大,计算机正常运算的话会在底层去做非常多的事情,但是如果是位运算就会很快
左移<<,右移>>
2<<3 = 16,原因如下
二进制 十进制
0000 0000 = 0
0000 0001 = 1
0000 0010 = 2
0000 0100 = 4
0000 1000 = 8
0001 0000 = 16
0010 0000 = 32
可以发现1每向左移动一位就相当于把数字*2,右移相当于/2
在很多底层算法里面,会用一些位运算来做一些精巧的运算,因为位运算有一个好处,效率高,他是直接跟底层打交道的,效率极其高!