<Java>关于逻辑运算符&&、||、!与位运算符&、|、^、~的理解

逻辑运算符

逻辑运算符是对布尔型变量进行运算,其结果也是布尔型。
逻辑与&&、逻辑或||、逻辑非!

逻辑运算符的优先级为:!运算级别最高,&& 运算高于 || 运算。!运算符的优先级高于算术运算符,而 && 和 || 运算则低于关系运算符。结合方向是:逻辑非(单目运算符)具有右结合性,逻辑与和逻辑或(双目运算符)具有左结合性。

其中逻辑与&&和逻辑或||也可称为短路操作符(条件操作),采用短路的方式,可以提高我们的效率。从左到右计算,如果确定值则不会再计算下去。

“&&”运算符检查第一个表达式是否返回“false”,如果是“false”则结果必为“false”,不再检查其他内容。以下代码java会报异常:
Exception in thread “main” java.lang.ArithmeticException: / by zero

public class Test1 {
	 public static void main(String[] args) {
		  int a = 10;
		  if(a>1/0&&a>1) {
		   	System.out.println("Hello");
		  }else {
		   	System.out.println("World");
		  }
	}
}

但如果将a>1与a>1/0调换以下位置,程序则会输出World,不再检查后面明显错误的1/0了

“||”运算符检查第一个表达式是否返回“true”,如果是“true”则结果必为“true”,不再检查其他内容。

public class Test1 {
 	public static void main(String[] args) {
	  	int a = 10;
	  	if(a>1||a<1/0) {
	  	 	System.out.println("Hello");
  		}
 	}
}

上述代码1/0明显错误, 但“||”先执行a>1的运算,返回true,所以短路了,不再检查后续代码。

位运算符

位运算符主要针对二进制,它包括了:“& 按位与”、“~按位非”、“| 按位或”、“^ 按位异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。

& 按位与:只要有一个为false,就返回false。
~按位非:不是false就返回true,不是true,就返回false
| 按位或:只要有一个为true,就返回true。
^ 按位异或:如果两个相同,就返回false,否则就返回true

“& 按位与”、“| 按位或”、“^ 按位异或”也可称为非短路运算符。

public class Test1 {
	 public static void main(String[] args) {
 		int a = 10;
  		if(a>1&a<1/0) {
  	 		System.out.println("Hello");
 	 	}	
}

“&”会检查每一个表达式,虽然a>1已经返回true,但还是会检查其它内容,所以最后代码会报错,其它几个位运算符跟&的处理机制相同。

短路运算符(&&、||)只能用于逻辑表达式内,只能操作布尔型的。非短路运算符(&、|、^)可用于位表达式和逻辑表达式内,不仅可以操作布尔型,而且可以操作数值型。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值