天天看點

總結位運算符與邏輯運算符的差別

一.位運算是将資料先轉化為二進制數補碼形式,再逐位(bit)按規則計算。

1.“按位與”運算符“&”,規則:全1則1,否則為0

總結位運算符與邏輯運算符的差別

2.“按位或”運算符“|”,規則:全0則0,否則為1

3.“按位與”運算符“~”,規則:有1則0,有0則1

4.“按位與”運算符“^”,規則:相同為0,不同為1

這裡要注意:按位異或運算是可逆的,即如果對某個資料a進行兩次相同的異或運算,則結果會還原為a,如對數值3進行兩次和5的異或運算:

3 ^ 5 = 6;
	6 ^ 5 = 3;
           

二.邏輯運算符及其運算規則

1.邏輯運算符:

總結位運算符與邏輯運算符的差別

2.邏輯運算符運算規則:

總結位運算符與邏輯運算符的差別

這兩者之間的差別在于:

邏輯運算符隻能對boolean類型進行邏輯運算,而位運算還可以對數值進行運算;

邏輯運算符有短路情況,即前面的表達式可以得到最終結果時,後面的表達式将不被執行。

下面通過一個程式來更加深入了解他們的不同:

public class HelloWorld{

	public static void main(String [] args){
		int a = 10;
		int b = 10;
		if(((a = 0) == 0) || ((b = 20) == 20)) {
		
		System.out.println("b=" + b);
		}

		int x = 10;
		int y = 10;
		if(((x = 0) == 0) | ((y = 20) == 20)) {
		
		System.out.println("y=" + y);
		}	
	}
}
           
總結位運算符與邏輯運算符的差別

對于b=10這一結果,(a = 0) == 0為true,邏輯或中有一個為真即成立,Java程式不會執行(b = 20)==20,是以結果為10。

對于y=20這一結果,由于要進行按位或運算,是以先計算"|"左右兩邊的值,即true|true,而true在二進制邏輯中為1,由此可知true|true的二進制結果依然為1,但是二進制1在boolean類型中表示true,是以輸出結果為20。