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

逻辑运算符有三种类型:

                  运算符                        用法                                                              含义

&&

op1&&op2

逻辑与

||

op1||op2

逻辑或

!op

逻辑非

 运算规则为:

op1

op2

op1&&op2

op1||op2

!op1

true

True

true

true

false

True

False

false

true

false

False

True

false

true

true

False

False

false

false

true

 简而言之:&&   全真则真 全假则假

                   ||      有真则真 全假才假

                   !    真变假     假变真

 

位运算符 :位运算是将数据转化为二进制数补码形式,再逐bit)按规则计算。

“按位”运算符“&”,规则:11,否则为0

a         00000000 00000000 00000000 00000111

b   &   10000001 10100101 11110011 10101011

c         00000000 00000000 00000000 00000011

“按位”运算符“|”,规则:00,否则为1

a          00000000 00000000 00000000 00000111

b     |    10000001 10100101 11110011 10101011

c          10000001 10100101 11110011 10101111

“按位”运算符“~”,规则:10,遇01

a    ~    00000000 00000000 00000000 00000111

b          11111111 11111111 11111111 11111100

 

“按位异或”运算符“^”,规则:相同为0,不同为1

a         00000000 00000000 00000000 00000111

b   ^    10000001 10100101 11110011 10101011

c         10000001 10100101 11110011 10101100

 

逻辑运算符(&&、||)与位运算符&|)的区别:

          ①逻辑运算符只能针对Boolean(布尔)类型进行逻辑运算,而位运算还可以对数值进行逻辑运算

          例如:用逻辑运算符进行位运算将会报错

public class HelloWorld{

	public static void main(String [] args){
		System.out.println(1 && 2);
	}
}

 

 

       用位运算符却仍然可以对数值进行逻辑运算

 

public class HelloWorld{

	public static void main(String [] args){
		System.out.println(1==1 & 2==2);
	}
}

          ②逻辑运算符有短路情况,即前面的表达式可以得到最终结果时,后面的表达式将不被执行。

          例如:

public class HelloWorld{

	public static void main(String [] args){
		int a = 10;
		int b = 10;
		if (((a = 0) == 0) || ((b = 20)  == 20)) {
			System.out.println("b=" + b);
	}
	
		int x = 10;
		int y = 10;
		if (((x = 0)  == 0) | ((y = 20)  == 20)) {
			System.out.println("y=" + y);
	}
	}
}

输出结果为

由于逻辑运算符的短路性,在判断出(a = 0) == 0) 为真时,由于“||”运算有真则真的特性,结果已经可以判断为真,故之后对b的赋值不再运行,所以b仍然为10;

而在第二个if表达式中,由于位运算符的运算方式———将数据先转化为二进制补码形式,所以y已经转化并且运行了赋值,最后再通过if表达式判断式子真假,因此y的值被改变为20.

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值