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

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

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。
  • 按位取反運算符「~」的原理:是將內存中的補碼按位取反(包括符號位)。segmentfault

    1. 二進制數在內存中是以補碼的形式存放的。
    2. 補碼首位是符號位,0表示此數爲正數,1表示此數爲負數。
    3. 正數的補碼、反碼,都是其自己。
    4. 負數的反碼是:符號位爲1,其他各位求反,但末位不加1 。
    5. 負數的補碼是:符號位不變,其他各位求反,末位加1 。
    6. 全部的取反操做、加一、減1操做,都在有效位進行。
      • 例如:正數
      • 正數9(二進制爲:1001)在內存中存儲爲01001,必須補上符號位(開頭的數字0爲符號位)。
      • 轉二進制:0 1001
      • 計算補碼: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
   */
            
    }
}
我是阿康同窗,在北京奮鬥的Java軟件工程師。
愛生活;愛攝影;愛籃球,喜歡曼巴精神。
人生格言:「認真洗臉,多讀書按時睡,少食多餐繼續善良保持愛。」

下面的是個人公衆號二維碼圖片,歡迎關注。
qrcode_for_gh_81648977319e_258.jpg網站

文章處1spa


  1. 經常使用進制覽表
相關文章
相關標籤/搜索