&和&&的区别+变量a和b交换的三种方法+最有效率的方式计算2*8

&和&&的区别

  1. &可以作为逻辑运算和位运算,&&只可以作为逻辑运算
  2. 当两个符号都作为逻辑运算使用时,区别如下:
    &逻辑与当前后两值都为true,结果为true
    &&短路与正常情况下和逻辑与执行方式一样,当执行过程中第 一个为false时,发生短路,直接得到最终结果false

变量a和b交换的三种方法

1. 利用第三个空间c进行交换

public class Test{
	public static void main(String[] args){
		int a = 1;
		int b = 2;
		int c = a;//1
		a = b;//2
		b = c;//1
		System.out.println(a);//2
		System.out.println(b);//1
	}
}

缺点:开辟了第三个空间c

2. 利用两变量之和进行交换

public class Test{
	public static void main(String[] args){
		int a = 1;
		int b = 2;
		a = a + b;//将a+b的和赋值给a,此时a为3
		b = a - b;//将a+b的和减去原来的b,得到的结果为原来的a,此时b为1
		a = a - b;//2
		System.out.println(a);//2
		System.out.println(b);//1
	}
}

优点:节省了一个内存空间
缺点:两数相加容易产生越界

3. 利用a^(异或)两次b为a本身

public class Test{
	public static void main(String[] args){
		int a = 1;
		int b = 2;
		a = a ^ b;//001  1
			  //010  2
			  //011  3
			  //1^2^2=1 一个数字异或同一个数字两次,值不变,a==异或中间值,b==2
		b = a ^ b;//a==异或中间值,b==1
		a = a ^ b;//2
		System.out.println(a);//2
		System.out.println(b);//1
	}
}

优点:节省内存空间,不会产生越界

最有效率的方式计算2*8

2<<3相当于2*2的3次幂
00000010左位移3为:00010000=16

猜你喜欢

转载自blog.csdn.net/weixin_42316524/article/details/106310390