天天看點

java學習07--位運算符

//位運算符:<<(左移) >>(右移) >>>(無符号右移) & | ^(異或) ~(反碼)

class Operate4 
{
    public static void main(String[] args) 
    {
        System.out.println(&);//110&011=010=2;1是有效位,将有效位進行運算;
        System.out.println(|);//110|011=111=7;1是有效位,将有效位保留;
        System.out.println(^);//110|011=101=5;1是有效位,将有效位進行計算;
/*      一個數異或同一個數2次,結果還是這個數;可以用于加密運算;
将一個數進行異或就相當于加密了,在通過異或同樣的數就可以解密了~
銀行的秘鑰就是該技術
算法:一個數通過一系列的計算之後得到另一個數;
*/

//      ~反碼:取反運算
        System.out.println(~); //開發幾乎用不上;

/*      位移運算:
左移幾位其實就是該資料乘以2的幾次方;
<<:可以完成2的次幂運算。

右移幾位其實就是該資料除以2的幾次方;
>>:對于高位出現的空位,原來高位是什麼,就用什麼補,保證符号位存在,未改變符号;

>>>:無符号右移
對于高位出現的空位,無論原來高位是什麼,空位都用0補;

進行除2次幂運算時,用>>;

*/
        System.out.println(<<);//3往左移2位;0000-00000000-00000000-00000000-0011變成00……1100=12;
        System.out.println(<<);//3*(2的4次方)= 3*16 = 48     

        System.out.println(>>);//6往右移1位;0000-00000000-00000000-00000000-1100變成00……0110=3;
        System.out.println(<<);//6/(2的2次方)= 6*4 = 1(小數點省略);       

//      練習
//      2乘以8的等于幾?(最有效率的方式)
        System.out.println(<<);

//      對2個整數變量的值進行互換;
        int a = , b = ;
        System.out.println("a="+a+",b="+b);

        //使用第三方變量
        //正常程式設計開發的時候使用,閱讀性最好;
        /*int c;
        c = b; b = a; a = c;
        System.out.println("a="+a+",b="+b);
        */

        //不使用第三方變量,這種方式不要用,如果兩個整數的數值過大,會超出int範圍,會強制轉換,資料會變化;
        /*a = a + b;//a = 3 + 5;
        b = a - b;//b = 8 - 5 =3;
        a = a - b;//a = 8 - 3 =5;
        System.out.println("a="+a+",b="+b);//連接配接符+的使用,别忘了啊~
        */

        //不使用第三方變量,使用異或運算
        //缺點:閱讀性差,面試的時候可以用
        a = a ^ b;//a = 3 ^ 5;
        b = a ^ b;//b = (3^5)^5;b=3;
        a = a ^ b;//a = (3^5)^3;a=5;
        System.out.println("a="+a+",b="+b);
    }
}