Java基础运算符03(逻辑运算符与位运算符)
逻辑运算符
- 逻辑运算符有三种,与(and)或(or)非(取反)
public class Demo {
public static void main(String[] args) {
boolean a= true;
boolean b= false;
System.out.println("a && b:"+(a&&b));//逻辑与运算:两个都是真才为真,结果才是true
System.out.println("a || b:"+(a||b));//逻辑或运算:两个中只要有一个是真结果就是true
System.out.println("!(a && b):"+!(a&&b));//取反:如果是真,则结果为假,如果是假,结果则为真
}
}
输出结果:
a && b:false
a || b:true
!(a && b):true
Process finished with exit code 0
- 在这里还有一个短路运算,就是当第一步已经判断出结果时,就不再继续向后运算,比如 System.out.println("a && b:"+(a&&b));这里如果a是假后边就不再判断b了,直接返回结果,代码实验如下:
public class Demo {
public static void main(String[] args) {
int a=10;
boolean b =(a<10)&&(a++<10);
System.out.println(b);
System.out.println(a);
}
}
输出结果:
false
10//如果判断完a之后还进行运算的话,a++此时输出的结果应该是11,但是结果为10,由上一节我们知道a++只要调用必定执行,但是这里没执行,所以我们判定,这里判断完a为假之后,并没有执行后边的命令
Process finished with exit code 0
位运算
- 位运算是二进制里边的运算:二进制里&同样表示与,|表示或,~表示非,^为抑或(相同为0不同为1),<<为左移,>>为右移
- 如:A = 0000 1101,B = 1110 0011,那么A&B为0000 0001,A|B为1110 1111,~B为0001 1100,A^B为1110 1110
- 问:在计算机里2乘8=16怎么运算最快,因为在计算机里是无法识别8的,所以拆分成2乘2乘2,2乘8=2乘2乘2乘2
- <<,>>左移右移是什么效果?原理是什么?如下:
public class Demo {
public static void main(String[] args) {
System.out.println(3<<1);
System.out.println(3>>1);
}
}
输出结果:
6
1
Process finished with exit code 0
在二进制中3是0011,向左移一位变成了0110转换为十进制也就是6,同理向右移一位0011就变成了0001,转换回十进制依旧是1