&(按位與)
/**
* &按位與的運算規(guī)則是將兩邊的數(shù)轉(zhuǎn)換為二進制位,然后運算最終值,運算規(guī)則即(兩個為真才為真)1&1=1 , 1&0=0 , 0&1=0 , 0&0=0
* 3的二進制位是0000 0011 , 5的二進制位是0000 0101 , 那么就是011 & 101,由按位與運算規(guī)則得知,001 & 101等于0000 0001,最終值為1
* 7的二進制位是0000 0111,那就是111 & 101等于101,也就是0000 0101,故值為5
*/
public static void demo_1() {
int i = 3 & 5;
int y = 5 & 7;
System.out.println("i=" + i + " y=" + y);
}
運算結(jié)果 i = 1 y = 5
&&(邏輯運算符)
/**
* &&邏輯與也稱為短路邏輯與,先運算&&左邊的表達式,一旦為假,后續(xù)不管多少表達式,均不再計算,一個為真,再計算右邊的表達式,兩個為真才為真。
*/
public static void demo_2() {
String str = null;
if (str != null && (100 / 0 == 0)) {
System.out.println("&& 一旦表達式為假,后續(xù)不再計算");
} else {
System.out.println("(100 / 0 == 0) 如果被計算則會報算數(shù)異常");
}
}
運算結(jié)果 (100 / 0 == 0) 如果被計算則會報算數(shù)異常
|(位運算符)
/**
* | 按位或和&按位與計算方式都是轉(zhuǎn)換二進制再計算,不同的是運算規(guī)則(一個為真即為真)1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1
* 6的二進制位0000 0110 , 2的二進制位0000 0010 , 110|010為110,最終值0000 0110,故6|2等于6
*/
public static void demo_3() {
int i = 6 | 2;
System.out.println(i + "");
}
運算結(jié)果 6
||(邏輯運算符)
/**
* 邏輯或||的運算規(guī)則是一個為真即為真,后續(xù)不再計算,一個為假再計算右邊的表達式。
*/
public static void demo_4() {
if (5 > 3 || 3 > 5) {
System.out.println("結(jié)果為真");
}
}
運算結(jié)果 結(jié)果為真
^(異或運算符)
/**
* ^異或運算符顧名思義,異就是不同,其運算規(guī)則為1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0
* 5的二進制位是0000 0101 , 9的二進制位是0000 1001,也就是0101 ^ 1001,結(jié)果為1100 , 00001100的十進制位是12
*/
public static void demo_5() {
int i = 5 ^ 9;
System.out.println("異或運算符=" + i);
}
運算結(jié)果 12
<<(左移運算符)
/**
* 5<<2的意思為5的二進制位往左挪兩位,右邊補0,5的二進制位是0000 0101 , 就是把有效值101往左挪兩位就是0001 0100 ,正數(shù)左邊第一位補0,負數(shù)補1,等于乘于2的n次方,十進制位是20
*/
public static void demo_6() {
int i = 5 << 2;
System.out.println("左移運算符=" + i);
}
運算結(jié)果 左移運算符=12
>>(右移運算符)
/**
*
* 凡位運算符都是把值先轉(zhuǎn)換成二進制再進行后續(xù)的處理,5的二進制位是0000 0101,右移兩位就是把101左移后為0000 0001,正數(shù)左邊第* 一位補0,負數(shù)補1,等于除于2的n次方,結(jié)果為1
*/
public static void demo_9() {
int i = 5 << 2;
System.out.println("右移運算符=" + i);
}
運算結(jié)果 右移運算符=1
~(取反運算符)
/**
*
* 取反就是1為0,0為1,5的二進制位是0000 0101,取反后為1111 1010,值為-6
*/
public static void demo_8() {
int i = ~8;
System.out.println("取反運算符=" + i);
}
運算結(jié)果 取反運算符=-6
>>>(正數(shù)無符號右移)
/**
*
* 無符號右移運算符和右移運算符的主要區(qū)別在于負數(shù)的計算,因為無符號右移是高位補0,移多少位補多少個0。
* 15的二進制位是0000 1111 , 右移2位0000 0011,結(jié)果為3
*/
public static void demo_9() {
int i = 15 >>> 2;
System.out.println("無符號右移運算符=" + i);
}
運算結(jié)果 無符號右移運算符=3