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


版權聲明一:本文為博主原創文章,轉載請附上原文出處鏈接和本聲明。
版權聲明二:本網站的所有作品會及時更新,歡迎大家閱讀后發表評論,以利作品的完善。
版權聲明三:對不遵守本聲明或其他違法、惡意使用本網內容者,保留追究其法律責任的權利。
本文鏈接:https://home.cnblogs.com/u/zak24/

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表示此數為負數。

  3. 正數的補碼、反碼,都是其本身。

  4. 負數的反碼是:符號位為1,其余各位求反,但末位不加1 。

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

  6. 所有的取反操作、加1、減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
   */

    }
}

 


免責聲明!

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



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