Java中的&、&&、|、||、>>、<<、^运算符

关于这几个的运算符我一代码的实例来介绍,如下:

1.&、&&、|、||、首先它们都是逻辑运算符,但是&&和||是短路运算符,也就是只判断运算符左边的即可,就可以确定整个表达式的结果了;所以它的执行效率高于&和|,因为这两个运算符需要将表达式中所有的boolean值都判断一遍,值得我们注意的是,这四个运算符的执行结果最终都是一致的(&和&&,|和||)实验代码如下:


package com.my.collection.collections;

public class MoveTest {

	public static void main(String[] args) {
		//右移一位相当于除以2,右移n位相当于除以2^n次方
		int num=10;
//		System.out.println("num右移一位结果:"+(num>>1));//注意要在num>>1加上括号,否则会报错
//		System.out.println("num右移四位结果:"+(num>>4));//num/(2^4)即4/16
		//左移一位相当于乘以2,同上
//		System.out.println("num左移一位的结果:"+(num<<1));//相当于num*2  结果20
//		System.out.println("num左移四位的结果:"+(num<<4));//相当于num*(2^4) 结果160
		
		//按位异或^, 对应二进制位相同结果为0,否则为1
//		System.out.println(1^1);//这是十进制的数字
//		System.out.println(1^1^2);//这是十进制的数字
//		System.out.println(2^3^2);
		//针对&和|和&&和||运算符
		boolean  tag1=true;
		boolean  tag2=false;
		boolean  tag3=true;
		boolean  tag4=false;
		System.out.println(tag1&tag2&tag3);
		System.out.println(tag1|tag3|tag4);
		System.out.println(tag1|tag2);
		System.out.println(tag4&tag3);
		//System.out.println(1^1^4^7^7);//能消除掉的必须是偶数对
	}

}

运行结果
在这里插入图片描述
以上代码中有关于>>、<<、^运算符操作,只是注释了读者可以自行去掉注释运行看结果。另一个关于&和&&,|和||运算的示例代码如下:
下面代码有部分注释,读者可以去掉注释看运行的结果


package com.my.collection.collections;

public class Test2 {

	public static void main(String[] args) {
		//测试短路运算符&&和||,这两个运算符是只要一边出现了,则不用管这个表达式的结果
		int i=9,j=7;
//		if(i>2||++j<90) {
//			//这里i>2成立,所以就不在执行++j操作了,即短路了,j=7,而不是8,因为短路了后面不执行了
//			System.out.println("测试j的值为:"+j);
//		}else {
//			System.out.println("failed");
//		}
		
//		if(i<2||++j<90) {
//			//这里i>2不成立,所以就执行++j操作了,没有短路
//			System.out.println("测试j的值为:"+j);
//		}else {
//			System.out.println("failed");
//		}
		
		/*
		 * 对于|运算符,只要有一个为真的话,最终结果都为真的
		 */
//		if(i>2|++j<90) {
//			//这里i>2成立,因为是|运算符,所以不会短路,即所有的运算表达式都要执行一边,即++j执行了,最终结果表达式为真,所以j为8
//			System.out.println("测试j的值为:"+j);
//		}else {
//			System.out.println("failed");
//		}
		
//		if(i>2|++j>90) {
//			//这里i>2成立,因为是非短路的,所以就执行++j操作了而且只要一个为真最终结果就为真的
//			System.out.println("测试j的值为:"+j);
//		}else {
//			System.out.println("failed");
//		}
		
		/*
		 * 非短路运算符&,要所有的表达式执行完了才能判断真假,而且有一个为假的话,这个表达式结果为假的
		 */
		if(i>2&++j>90) {
			//这里i>2成立,因为是非短路的,所以就执行++j操作了而且只要一个为真最终结果就为真的
			System.out.println("测试j的值为:"+j);
		}else {
			System.out.println("failed");
		}


	}

}

运行结果2
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值