什么是逻辑运算符
逻辑运算符有哪些?
运算符 | 含义 | 结合方向 | 实例 | 结果 |
---|---|---|---|---|
&& | 逻辑与 | 从左到右 | 2 == 2 && 1 == 1 | true |
II | 逻辑或 | 从左到右 | 1!=2 II 2 == 4 | true |
! | 逻辑非 | 从左到右 | !(2==4) | true |
要注意的是,逻辑运算符只能对布尔型(Boolean)数据进行运算。
例如:
public class Test{
public static void main(String [] args){
System.out.println(2>1 && 3<1);
}
}
运行结果为
D:\Works\JAVA>java Test
false
逻辑运算符的优先级
!(逻辑非)运算级别最高,&&(逻辑与)优先级高于||(逻辑或);
!(逻辑非)运算符高于算术运算符
&&(逻辑与)和||(逻辑或)低于关系运算符
什么是位运算符
位运算符是先将数据转化为二进制补码形式,再逐位运算。
运算符 | 含义 | 规则 |
---|---|---|
& | 按位与 | 全1则1,否则为0 |
I | 按位或 | 全0则0,否则为1 |
~ | 按位非 | 遇1则0,遇0则1 |
^ | 按位异或 | 相同为0,不同为1 |
要注意的是,位运算符既可以对布尔型(Boolean)数据运算,也可与对数值型数据运算。
例如:
public class Test{
public static void main(String [] args){
System.out.println(2 & 1);
}
}
运行结果为
D:\Works\JAVA>java Test
0
再例如:
public class Test{
public static void main(String [] args){
System.out.println(true & false);
}
}
运行结果为
D:\Works\JAVA>java Test
false
逻辑运算符与位运算符的区别在哪?
①逻辑运算符只能针对布尔(Boolean)类型进行逻辑运算,而位运算还可以对数值进行逻辑运算。
②逻辑运输算符有“短路”情况,即前面的表达式可以得到最终结果时,后面的表达式不会被执行。
对比实例
逻辑型(代码1)
public class Test{
public static void main(String [] args){
int a = 10;
int b = 10;
if (((a = 0) == 0) || ((b = 20) == 20)) {
/*
*(a = 0) == 0的值为true,逻辑或中有一为真即成立,java不执行下一句(b = 20) == 20,故b的值为10。
*/
System.out.println("b=" + b);
}
}
}
运行结果
D:\Works\JAVA>java Test
b=10
位运算型(代码2)
public class Test{
public static void main(String [] args){
int a = 10;
int b = 10;
if (((a = 0) == 0) | ((b = 20) == 20)) {
/*
*要进行按位或运算,java会先计算两边的值,即true|true,运算结果依然为true,但此时java已经进行了(b = 20)的运算,因此输出的b的值为20。
*/
System.out.println("b=" + b);
}
}
}
运行结果
D:\Works\JAVA>java Test
b=20
在代码段1中,(a = 0) == 0的值为true,逻辑或中有一为真即成立,java不执行下一句(b = 20) == 20,故b的值为10。
而再代码段2中,要进行按位或运算,java会先计算两边的值,即true|true,运算结果依然为true,但此时java已经进行了(b = 20)的运算,因此输出的b的值为20。