java位運算和無符號運算


計算機在底層使用的是二進制補碼進行運算。

計算規則:

  正數的原碼、反碼、補碼是其二進制本身。

  負數的原碼首先計算其二進制數,然后最高位使用1表示負數,反碼是最高位不變其它位取反,補碼是在反碼的基礎上進行+1操作。

  System.out.println( 8 >> 1);//正數進行右移位運算

      8的二進制是 0000 0000 0000 0000 0000 0000 0000 1000,進行右移1位得到二進制0000 0000 0000 0000 0000 0000 0000 0100,然后轉成二進制是4
  以此類推     

   /*   1000
         *   0100    4    右移1位
         *   0010    2    右移2位
         *   0001    1    右移3位
         *   0000    0    右移4位
         * */

       System.out.println( -8 >> 1);//負數進行右移位運算  (右移高位補1)

      -8的二進制是1000 0000 0000 0000 0000 0000 0000 1000,這里最高位1表示是負數

  /*
         * 1000 0000 0000 0000 0000 0000 0000 1000 原碼
         * 1111 1111 1111 1111 1111 1111 1111 0111 反碼
         *                                       1
         * 1111 1111 1111 1111 1111 1111 1111 1000   補碼
         * 1 1111 1111 1111 1111 1111 1111 1111 100 位運算得到的是補碼然后轉到原碼
         * 1 0000 0000 0000 0000 0000 0000 0000 011
         *                                           1
         * 1 0000 0000 0000 0000 0000 0000 0000 100 -4  原碼
         * */

   System.out.println(8<<2);//正數進行左移位運算

          /*

   * 0000 0000 0000 0000 0000 0000 0000 1000  原碼

   * 0000 0000 0000 0000 0000 0000 0010 0000 位運算 32

   */

   System.out.println(-8<<2);//負數進行左移位運算(左移地位補0)
        /* 1000 0000 0000 0000 0000 0000 0000 1000   -8的原碼
         * 1111 1111 1111 1111 1111 1111 1111 0111   反碼
         * 1111 1111 1111 1111 1111 1111 1111 1000   補碼
         * 11 1111 1111 1111 1111 1111 1111 100000  位運算
         * 10 0000 0000 0000 0000 0000 0000 011111 位運算之后補碼
         * 10 0000 0000 0000 0000 0000 0000 100000 原碼
         *  -32
         * */

  System.out.println(-9>>>2);無符號運算,高位進行補0,低位舍去
        /*    
         * 1000 0000 0000 0000 0000 0000 0000 1001    原碼

    * 1111 1111 1111 1111 1111 1111 1111 0110 反碼
         * 1111 1111 1111 1111 1111 1111 1111 0111    補碼
         * 001111 1111 1111 1111 1111 1111 1111 01    移位   (移位得到的是正數,所以補碼就是其本身)
         * */

 


免責聲明!

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



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