Java 基础(位运算符)

运算符:位运算

运算符 运算 范例
<< 左移 3 << 2 = 12 --> 322=12
>> 右移 3 >> 1 = 1 --> 3/2=1
>>> 无符号右移 3 >>> 1 = 1 --> 3/2=1
& 与运算 6 & 3 = 2
| 或运算 6 | 3 = 7
^ 异或运算 6 ^ 3 = 5
~ 取反运算 ~6 = -7

位运算是直接对整数的二进制进行的运算
注意:无 <<<

总结

  • 位运算符操作的都是整型的数据
  • << : 在一定范围内,每向左移1位,相等于 * 2;
    >> : 在一定范围内,每向左移1位,相等于 / 2;
class BitTest{
	public static void main(String[] args){
		int i = 21;
		
		System.out.println("i << 2 :" + (i << 2));     //84
		System.out.println("i << 3 :" + (i << 3));     //168
		System.out.println("i << 27 :" + (i << 27));   //-1476395008

		i = -21;
		System.out.println("i << 2 : " + (i << 2));       //i << 2 : -84
		System.out.println("i << 3 : " + (i << 3));       //i << 3 : -168
		System.out.println("i << 27 : " + (i << 27));     //i << 27 : 1476395008

                int m = 12;
		int n = 5;
		System.out.println("m & n : "+ (m & n));          //m & n : 4
		System.out.println("m | n : "+ (m | n));          //m | n : 13
		System.out.println("m ^ n : "+ (m ^ n));          //m ^ n : 9
		
		//练习: 交换两个变量的值
		int num1 = 10;
		int num2 = 20;
		System.out.println("num1 = " + num1 + ", num2 = " + num2);  //num1 = 10, num2 = 20
		
		//方式一: 定义临时变量的方式
		//int temp = num1;
		//num1 = num2;
		//num2 = temp;
		//System.out.println("num1 = " + num1 + ", num2 = " + num2);  //num1 = 20, num2 = 10
		
		
		//方式二:
		//好处: 不用定义临时变量
		//弊端:1.相加操作可能超出存储范围;2.有局限性:只能适用于数值类型
		//num1 = num1 + num2;
		//num2 = num1 - num2;
		//num1 = num1 - num2;
		//System.out.println("num1 = " + num1 + ", num2 = " + num2);    //num1 = 20, num2 = 10
		
		//方式三:使用位运算
		num1 = num1 ^ num2;
		num2 = num1 ^ num2;
		num1 = num1 ^ num2;
		System.out.println("num1 = " + num1 + ", num2 = " + num2);      //num1 = 20, num2 = 10
	}
}
原文地址:https://www.cnblogs.com/klvchen/p/14192868.html