1. 程式人生 > >java複習筆記第一篇:邏輯操作符與位操作符

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
	}
}