(基础)java中的位运算

位运算效率最高!

 

异或 ^

小应用:数据加密解密

一个数异或另一个数两次,则还原

A^B^B = A

A^B --->加密 C^B = A --->解密

 

左移 <<

左移n位等效于 乘以2的n次幂  , 3<<2 = 3*2*2

 

右移 >>

右移一位等效于 除以2, 8>>2 = 8/2/2

被移动的高位用原来的高位来补,原来是0就用0补,是1就用1补,保证符号位不变

 

无符号右移动 >>>

>>>与>>的区别:

不论高位是0还是1,都用0来补高位。

 

 

 

小应用

不使用第三变量,交互2个数的值

第一种方案,异或

	public static void main(String[] args) {
		int a = 3;
		int b = 5;
		System.out.println("a="+a);
		System.out.println("b="+b);
		a = a ^ b;
		b = a ^ b; // b = (a ^ b) ^ b = a的原始值;
		a = a ^ b; // a = (a ^ b) ^ a = b的原始值;
		System.out.println("a="+a);
		System.out.println("b="+b);
	}

 

 

第二种方案,求和,存在超过数据类型范围的可能

 

	public static void main(String[] args) {
		int a = 3;
		int b = 5;
		System.out.println("a="+a);
		System.out.println("b="+b);
		a = a + b;
		b = a - b;// b = (a+b)-b = a的原始值
		a = a - b;// a = (a+b)-a = b的原始值
		System.out.println("a="+a);
		System.out.println("b="+b);
	}

 

 

第三种方案,求差

 

	public static void main(String[] args) {
		int a = 3;
		int b = 5;
		System.out.println("a="+a);
		System.out.println("b="+b);
		a = a - b;
		b = a + b; // b = (a-b)+b = a的原始值
		a = b - a; // a = a-(a-b) = b的原始值
		System.out.println("a="+a);
		System.out.println("b="+b);
	}

 

你可能感兴趣的:(java)