java複習筆記第一篇:邏輯操作符與位操作符
1.邏輯操作符
java中邏輯操作符有:&長路與 、&&短路與、|長路或 、||短路或、!取反、^異或。其中:
&長路 和&&短路與 :無論是長路與還是短路與 ,兩邊的運算單元都是布林值 ,任意為假 ,就為假,都為真時才為真
區別:長路與&,兩側都會被運算。短路與&& ,只要第一個是false ,第二個就不進行運算了。
|長路或和||短路或:無論長路還是短路或 ,兩邊的運算都是布林值。都為假時,才為假 。任意為真時,就為真
區別:長路或|,兩邊都會被運算 。短路或||,只要第一個時true,第二個就不進行運行了 。
!取反:真變為假 ,假變為真。
^異或:不同,返回真。相同,返回假。
public class demo07 { public static void main(String[] args) { //1.長路與& 和 短路與&& int i = 1; System.out.println(i== 2& i++ ==2);//兩邊都運行了 i=2 System.out.println(i); int m=1; System.out.println(m==2&&m++==2);//第一個為false,第二個沒有執行 m=1 System.out.println(m); //2.長路或| 和 短路或 || int i2 =1; System.out.println(i2==1|i2++==2);//兩邊都運行了 System.out.println(i2);//2 int m2 = 1; System.out.println(m2==1||m++==2);//當第一邊為true,第二邊就不再運行了 System.out.println(m2);//1 //3.取反! boolean b = true; System.out.println(b);//輸出true System.out.println(!b);//輸出false //4.異或 boolean x = true; boolean c = false; System.out.println(x^c);// true System.out.println(x^!c);//false System.out.println(!x^c); } }
2.位操作符
位操作符:左移 <<、右移>>、無符號右移>>>,位或 |,位與 & 、異或 ^,取非 ~
左移<<: 根據一個整數的二進位制表達,將其每一位向左移動,最右邊一位補0
右移>>:也稱之為有符號右移。根據一個整數的二進位制表達,將其每一位向右移動。對於正數, 帶符號右移 >> 會把所有的位右 移,並在最前面補0;對於負數, 帶符號右移 >> 會把所有的位右移,並在最前面補1。
無符號右移>>>:
* 如果是一個負數,那麼對應的二進位制的第一位是1
* 無符號右移>>>會把第一位的1也向右移動,導致移動後,第一位變成0
* 這樣就會使得負數在無符號右移後,得到一個正數
位或| :將兩個位或的資料進行相加 兩個都為1的還是1 。一個為1,一個為0,則變為1。0的還是0。
位與&:將兩個資料進行位的相乘 兩個位都為1的還是1 ,一個為1,一個為0,則變為0,0的還是0。
異或 ^:
* m 00001001
* ^
* n 00001010 ——>011 下標相同的位置,位資料不同的留下,相同丟掉
取非 ~:
* 5的二進位制:0000 0101
* 取反為: 1111 1010 -6
*
* 6的二進位制:00000110
* 取反為: 11111001 -7
* 0的二進位制: 00000000 00000000 00000000 00000000
* -1的二進位制: 11111111 11111111 11111111 11111111
package day01;
/**
* 位操作符
* @author wangli
*
*/
public class demo08 {
public static void main(String[] args) {
/**
* 左移 <<
* 根據一個整數的二進位制表達,將其每一位向左移動,最右邊一位補0
* 右移>>
* 根據一個整數的二進位制表達,將其每一位向右移動
*
* 帶符號右移 >>
* 對於正數, 帶符號右移 >> 會把所有的位右移,並在最前面補0
* 對於負數, 帶符號右移 >> 會把所有的位右移,並在最前面補1
* 無符號右移>>>
* 如果是一個負數,那麼對應的二進位制的第一位是1
* 無符號右移>>>會把第一位的1也向右移動,導致移動後,第一位變成0
* 這樣就會使得負數在無符號右移後,得到一個正數
*
*/
System.out.println(-2>>>3);
System.out.println(2<<3);//最快得到16
System.out.println(3<<3);//最快得到24
//右移 >>
System.out.println(24>>2);
//位或 | 將兩個位或的資料進行相加 兩個都為1的還是1 ,一個為1,一個為0,則變為1,0的還是0
int m=5,n=6;
System.out.println(Integer.toBinaryString(m));//00001001
System.out.println(Integer.toBinaryString(n));//00001010
System.out.println(Integer.toBinaryString(m|n));//00001011
System.out.println(m|n);
//位與 & 將兩個位或的資料進行相乘 兩個都為1的還是1 ,一個為1,一個為0,則變為0,0的還是0
System.out.println(m&n);//00001000
/** 異或 ^
* m 00001001
* ^
* n 00001010 ——>011 位置資料不同的留下,相同丟掉
*/
System.out.println(m^n);//
/**
* 控制檯輸出二進位制的時候將左側全為0的省略掉了
* 取非 ~
* 5的二進位制:0000 0101
* 取反為: 1111 1010 -6
*
* 6的二進位制:00000110
* 取反為: 11111001 -7
* 0的二進位制: 00000000 00000000 00000000 00000000
* -1的二進位制: 11111111 11111111 11111111 11111111
*
*
*/
System.out.println(~5);//11111111 11111111 11111111 11111010
System.out.println(Integer.toBinaryString(-1));//11111111 11111111 11111111 11111111
}
}