Java運算符使用總結(重點:自增自減、位運算和邏輯運算)


 Java運算符共包括這幾種:算術運算符、比較運算符、位運算符、邏輯運算符、賦值運算符和其他運算符。(該圖來自網絡) 

簡單的運算符,就不過多介紹使用了,可自行測試。關於賦值運算,可以結合算術運算和位運算來簡化代碼。

        int a = 5;
        a += a; // a = a + a;
        a /= a; // a = a / a;
        a %= a; // a = a % a;
        a &= 6; // a = a & 6;
        //.....

 

理解自增自減運算符

自增自減分為前置和后置。例如:i++  ++i i-- --i。 要明確一點,前置與后置的自增或自減運算符若沒運用到表達式中,那么無區別;若是參與到表達式運算中,只需記住:誰在前面就先執行誰。

        int a = 0;
        a++; //或者++a
        System.out.println(a); // a輸出1 
    //最常見的for循環中,在迭代條件中,i++ 和 ++i無區別,因為沒有用於表達式。

 將前置自增和后置自增運用到表達式

        int a = 5;
        System.out.println(a--); //5,先打印a的值,之后a自減1
        System.out.println(a); //4
        System.out.println(++a); //5, 先對a值自增,然后打印a值

復雜一點,更好的理解前置和后置的區別:

        int a = 6;
        int b = 8; int c = ++a + b-- - a-- + --b + b++ + --a; System.out.printf("%d|%d|%d", a,b,c); // 5,7,25

使用圖片來理解會更加一目了然。

 再隨便給一個,按照圖示方式去理解自增自減。

        int a = 6,b = 8;
        int c = (--a) + (a--) - (b--) + (++b) + (a++) - (b--); //加括號更容易閱讀
//        int c = --a + a-- - b-- + ++b + a++ - b--;
        System.out.printf("%d|%d|%d", a,b,c); // 5,7,6
    }

 通過圖片的理解方式去學習自增自減,無論是前置還是后置,無論會有多復雜,都可以很有條理的解決。 當然,寫程序時別寫這么復雜,因為沒意義,這里僅是用於理解。

 

理解位運算符

程序中的所有數在內存中都是以二進制的形式存儲,位運算符就是直接對二進制數進行操作運算,速度很快。 位運算符包括 & | ~ ^ << >> >>>。 下面會一一介紹。 其中二進制數的1表示真, 0表示假

 

按位與(&):若相對應位都為1,則為1,否則為0。 

               15 & 5 = 5           16 & 12 = 0              18 & 14 = 2

        15  1 1 1 1                     16  1 0 0 0 0                            18  1 0 0 1 0
        -----------                        -------------                            -------------
        5   0 1 0 1                     12  0 1 1 0 0                            14  0 1 1 1 0
        -----------                        -------------                            -------------
            0 1 0 1 (十進制為5)              0 0 0 0 0 (十進制為0)                     0 0 0 1 0 (十進制為2)

 

按位或(|):若相對應位其中一個為1,則為1,否則為0。  

     9 | 11 = 11                                 5 | 20 = 21

        9   1 0 0 1                     5   0 0 1 0 1                            
        -----------                        -------------                            
        11  1 0 1 1                     20  1 0 1 0 0                            
        -----------                        -------------                            
            1 0 1 1 (十進制為11)             1 0 1 0 1 (十進制為21)    

 

按位異或(^):若相對應位互不相同,則為1,否則為0。 

      9 ^ 11 = 2          5 ^ 20 = 17

        9   1 0 0 1                     5   0 0 1 0 1                            
        -----------                        -------------                            
        11  1 0 1 1                     20  1 0 1 0 0                            
        -----------                        -------------                            
            0 0 1 0 (十進制為2)              1 0 0 0 1 (十進制為17)    

 

按位取反(~) 

假設要取反的數為n, 那么公式如下:

~n = -(n+1),正整數按位取反的數是它本身+1的負數。

 ~ -n = | -n + 1 |, 負整數按位取反的數是它本身+1的絕對值。 例如:~10 = -11; ~ -11 = 10;

 

按位左移和右移(<< >>):左移表示二進制數向左移動指定位數,低位補相應0填充。 右移表示二進制數向右移動指定位數,高位補相應0填充。

左移運算原理

        11  0 0 0 0 1 0 1 1                                 65   1 0 0 0 0 0 1                            
       <<2  0 0 1 0 1 1 0 0 (低位補相應0)                    <<3  1 0 0 0 0 0 1 0 0 0                        
            ---------------                                      -------------------
            101100 = 2^5 + 2^3 + 2^2 = 44                        1000001000 = 2^9 + 2^3 = 520    

 右移運算原理

        75  1 0 0 1 0 1 1                   65   1 0 0 0 0 0 1                            
       >>6  0 0 0 0 0 0 1                   >>3  0 0 0 1 0 0 0  [低位移除 0 0 1, 高位補相應位數0]                         
            -------------                        ---------------
            0001 = 1                             1000 = 8

 

左移與右移的運算規律總結:左移幾位就乘以2的幾次方 , 右移幾位就除以2的幾次方。

4<<5 為例,就是4 * 2^5 = 4 * 32 ,很快得出結果128

10>>2 ,10除以 2的2次方  10/4 = 2。

若想快速獲取2的N次方,只需 1<<N 即可,例如 1<<10 = 2 ^ 10 = 1024

 

理解邏輯運算符

邏輯運算符一般使用:邏輯與(&&)、邏輯或(||)和邏輯非(!)。邏輯運算符也稱為短路運算。

&&表示and, 兩邊操作數都為真,才為真,否則為假。左邊為假時,不再計算右邊。 true && true = true,  false && true = false

||表示or, 兩邊操作數其中一個為真,則為真,否則為假。左邊為真時,不再計算右邊。 true || false = true,  false || false = false

!表示取反,若操作數為真,則為假;操作數為假,則為真。 !true = false  !false = true。 取反邏輯很有用,可以簡化邏輯操作。

        //判斷閏年  能整除400 或者 能整除4但不能整除100
        if((year % 400 == 0) || (year % 4 == 0) && year % 100 != 100)
        
        //求出能同時整除5和7的數
        if(num % 5 == 0 && num % 7 == 0) //求出能整除6 或者 整除8的數 if(num % 6 == 0 || num % 8 == 0) //求出能整除 7 但不能整除9的數 if(num % 7 == 0 && num % 9 != 0) //某些boolean方法, 例如判斷質數。 boolean isPrime(int i) {} //通過取反操作,求某個范圍中不是質數的數。 !true = false,不執行。 !false = true,執行。 if(!isPrime()) {}

 

除了以上之外,另外說一下按位異或^用於邏輯運算。 

            //要么整除5,要么整除8,但不能同時整除5和8。使用異或^來完成互斥邏輯
            if(num % 5 == 0 ^ num % 8 == 0)
            //T ^ T = false,  T ^ F = true, F ^ T = true

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM