Java中「與運算,或運算,異或運算,取反運算。」

版權聲明一:本文爲博主原創文章,轉載請附上原文出處連接和本聲明。
版權聲明二:本網站的全部做品會及時更新,歡迎你們閱讀後發表評論,以利做品的完善。
版權聲明三:對不遵照本聲明或其餘違法、惡意使用本網內容者,保留追究其法律責任的權利。
本文連接:https://home.cnblogs.com/u/zak24/java

Java中的「與運算 & 」 規則 :都爲1時才爲1,不然爲0

  • 即:兩位同時爲「1」,結果才爲「1」,不然爲0
例如:
    public static void main(String args[]) {
        System.out.println( 7 & 9);

        /*
         * 7的二進制
         * 7/2=3...1
         * 3/2=1...1
         * 1/2=0...1
         * 直到商爲0,將餘數倒過來就是111
         * 因而得數是111
         */

        /*
         * 9的二進制
         * 9/2=4...1
         * 4/2=2...0
         * 2/2=1...0
         * 1/2=0...1
         * 因而得數是1001
         */

        /*
         *  7二進制 0111    
         *  9二進制 1001
         * ------------ 
         *          0001   ==1
         */        
    }

Java中的「或運算 | 」 規則 :有一個爲1,則爲1

  • 即 :參加運算的兩個對象只要有一個爲1,其值爲1。
例如:
    public static void main(String args[]){     
        System.out.println(7 | 9);  

        /*
         * 7二進制 0111
         * 9二進制 1001
         * -----------
         *         1111 == 15
         * */    
    }

Java中的「異或運算 ^ 」 規則 :都不一樣時,爲1

  • 即:參加運算的兩個對象,若是兩個相應位爲「異」(值不一樣),則該位結果爲1,不然爲0。
例如:
    public static void main(String args[]){
        System.out.println( 7 ^ 9);
        /*
         * 7二進制 0111
         * 9二進制 1001
         * ------------
         *        1110 == 14
         * */
    }   

Java中的「取反運算 ~ 」 規則 :按位取反

  • 即:對一個二進制數按位取反,即將1變0,0變1。
  • 按位取反運算符「~」的原理:是將內存中的補碼按位取反(包括符號位)。
  1. 二進制數在內存中是以補碼的形式存放的。網站

  2. 補碼首位是符號位,0表示此數爲正數,1表示此數爲負數。spa

  3. 正數的補碼、反碼,都是其自己。code

  4. 負數的反碼是:符號位爲1,其他各位求反,但末位不加1 。對象

  5. 負數的補碼是:符號位不變,其他各位求反,末位加1 。blog

  6. 全部的取反操做、加一、減1操做,都在有效位進行。內存

    • 例如:正數it

    • 正數9(二進制爲:1001)在內存中存儲爲01001,必須補上符號位(開頭的數字0爲符號位)。io

    • 轉二進制:0 1001function

    • 計算補碼:0 1001

    • 按位取反:1 0110 (變成補碼,這明顯變成了一個負數補碼,由於符號位是1)

    • 補碼減1 :1 0101

    • 在取反 :1 1010

    • 符號位爲1是負數,即-10

    • 例如:負數

    • 負數-1(二進制爲:0001)在內存中存儲爲10001,必須補上符號位(開頭的數字1爲符號位)。

    • -1的反碼爲11110

    • -1的補碼爲11111 (也能夠理解爲:反碼末位加上1就是補碼)

    • ~-1的取反 00000

    • ~-1結果爲:0

例1:
package test2;

public class CeshiQuFan {

    public static void main(String args[]){
            System.out.println(~7);//正數 

        /*
         * 7二進制 0000 0000 0000 0000 0000 0000 0000 0111
         *         0000 0000 0000 0000 0000 0000 0000 0111 反碼
         *         0000 0000 0000 0000 0000 0000 0000 0111 補碼        
         *         1000 0000 0000 0000 0000 0000 0000 1000 獲得正數的補碼以後進行取反 (這時獲得的是負數)符號位爲: 1
         *         因此~7的值爲:-8
         */
    }
}    
例2:
package test2;

public class CeshiQuFan {

    public static void main(String args[]){
            System.out.println(~-1);//負數    

  /*   * -1二進制 1000 0000 0000 0000 0000 0000 0000 0001   *          1000 0000 0000 0000 0000 0000 0000 1110  反碼(負數的反碼是:符號位爲1,其他各位求反,但末位不加1。)   *            1000 0000 0000 0000 0000 0000 0000 1111  補碼(負數的補碼是:符號位不變,其他各位求反,末位加1 。)   *          0000 0000 0000 0000 0000 0000 0000 0000  獲得負數的補碼以後進行取反 (這時獲得的是正數) 符號位爲: 0   *           因此~-1的值爲:0   */    }}
相關文章
相關標籤/搜索