java位操作總結


在計算機中所有數據都是以二進制的形式儲存的。

位運算其實就是直接對在內存中的二進制數據進行操作,因此處理數據的速度非常快。

方便演示,首先寫個二進制打印方法:

private static void printNum(int n){
	String num = Integer.toBinaryString(n);
	if(num.length() == 32){
		System.out.println(num);
	}else{
		StringBuilder sb = new StringBuilder("");
		for(int i =0;i < 32 - num.length(); i ++){
		sb.append("0");
		}
		System.out.println(sb.toString() + num);
	}
}

1、~操作符(取反),對應二進制位取反,0變成1,1變成0

int num = 3;
printNum(num);
printNum(~num);

 結果如下:

00000000000000000000000000000011
11111111111111111111111111111100

 

2、&操作符(與),對應二進制位進行與操作,都為1時變成1,其他變為0

int num1 = 3;
int num2 = 7;
printNum(num1);
printNum(num2);
printNum(num1 & num2);

 

結果如下:

00000000000000000000000000000011
00000000000000000000000000000111
00000000000000000000000000000011

 

3、|操作符(或)對應二進制位進行或操作,都為0時變成0,其他變為1

int num1 = 4;
int num2 = 7;
printNum(num1);
printNum(num2);
printNum(num1 | num2);

 

結果如下:

00000000000000000000000000000100
00000000000000000000000000000111
00000000000000000000000000000111

 

4、^操作符(異或),對應二進制位相同時,該位變成0,否則變成1

int num1 = 5;
int num2 = 9;
printNum(num1);
printNum(num2);
printNum(num1 ^ num2);

 

結果如下:

00000000000000000000000000000101
00000000000000000000000000001001
00000000000000000000000000001100

 

5、<<操作(左移),二進制位向左移動,右邊填充0

int num1 = 5;
printNum(num1);
printNum(num1 << 2);

 結果如下:

00000000000000000000000000000101
00000000000000000000000000010100

6、>>操作(右移),二進制位向右移動,左邊填充0

int num1 = 5;
printNum(num1);
printNum(num1 >> 2);

 結果如下:

00000000000000000000000000000101
00000000000000000000000000000001

位操作常見應用

1、不使用中間變量交換兩個數

int num1 = 2;
int num2 = 5;
num1 = num1^num2;
num2 = num2^num1;
num1 = num1^num2;
System.out.println("num1:" + num1 +"\n"+ "num2:" + num2 );

 2、求2的N次方

//求2的32次方:
System.out.println(Math.pow(2, 32));
System.out.println(1L<<32);

 

3、判斷奇數偶數

int num1 = 4;
int num2 = 9;
if(num1%2 == 0){
	System.out.println("偶數");
}else{
	System.out.println("奇數");
}
System.out.println((((int)num1&1) == 1) ? "奇數" : "偶數");
System.out.println((((int)num2&1) == 1) ? "奇數" : "偶數");

 4、求絕對值

int num = -3;
System.out.println(Math.abs(num));
int i = num >> 31;  
System.out.println(i == 0 ? num : (~num + 1));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM