java按位与,按位或,按位异或的逻辑判断

Java中逻辑运算符为&&、||、!三种。运算对象必须是boolean类型。

而&(按位与)、|(按位或)、^(按位异或)也可以进行逻辑判断。当然进行逻辑判断的时候,同样运算对象也必须是boolean类型。要注意~(按位取反)不能参与逻辑运算。

&&和||我们称为具有短路特性的运算符。而&和|是非短路运算符。所以本篇将讨论&、|、^的逻辑判断。

&:和&&一样,全真则真,有假则假;我们通过下面一段代码来看两者之间的区别:

		boolean logic = false;
		int var = 1;
		if(logic && ++var>1)
			System.out.print(true);
		else
			System.out.print(false);
		System.out.println("\t"+var);
		if(logic & ++var>1)
			System.out.print(true);
		else
			System.out.print(false);
		System.out.println("\t"+var);

运行结果是

false 1

false 2,

就是说第一个逻辑判断时,由于logic为false,整个逻辑判断为false,所以&&后面的判断++var>1并未被执行,所以输出为1,但是第二个逻辑判断时,尽管logic为false,程序还是对&的++var>1进行了判断,所以输出为2。现在我们将logic的初始值改为true,输出结果为

true 2
true 3

意味着++var>1在两次逻辑判断中都执行了,即程序需判定所有表达式都要为true。现在我们对逻辑表达式做出如下修改:logic & ++var。运行结果为:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
The operator && is undefined for the argument type(s) boolean, int
at logic.Logic.main(Logic.java:17)

运行结果报错。但是我们定义一个变量b = 2&++var,我们输出b的结果为:0。因此我们对于&可以得到以下结论:

1、&是非短路运算符,即使在前面的逻辑判断可以判定整个表达式的结果,程序依旧会执行&运算符后的全部表达式,每个独立的逻辑表达式都会执行完成后在一起进行&运算。如logic && ++var>1,先判定logic为false,再判定++var>1为false,最后综合两个表达式的结果,判定为false。

2、&在进行逻辑判断时,运算对象和&&一样必须全部为boolean。如果是boolean和其他类型的混合,则编译器会报错。

3、当运算对象全部为整型(或者可转化为整型)时,它是位运算符,不再构成逻辑运算。

|与&的使用方法类似,功能同||。

^的使用方法与&是一致的,都是非短路运算,但是功能跟!不同,^是异或。在逻辑判断中,当运算对象都是true或者都是false时,结果为false;当两者都不相同时,结果才为true。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值