逻辑运算符与位运算符的区别

什么是逻辑运算符

逻辑运算符有哪些?

运算符含义结合方向实例结果
&&逻辑与从左到右2 == 2 && 1 == 1true
II逻辑或从左到右1!=2 II 2 == 4true
逻辑非从左到右!(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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值