1. 程式人生 > >java基礎知識之位運算子

java基礎知識之位運算子

       位運算子除按位與和按位或運算子外,其他只能用於處理整數的運算元,。位運算是完全針對位方面的操作。整型資料在記憶體中以二進位制的形式表示,如int型變數7的二進位制表示是00000000 00000000 00000000 00000111。

       左邊最高位是符號位,最高位是0表示整數,若為1則表示負數,負數採用補碼錶示,如-8的二進位制表示為 11111111 11111111 11111111 11111000 。這樣就可以對整數資料進行按位運算

1,“按位與”運算

       “按位與“運算的運算子為”&“,為雙目運算子,”按位與“運算的運演算法則是:如果兩個整形資料a,b對應位都是1,則結果位才是1,否則是0,如果兩個運算元的精度不同,則結果的精度與精度高的運算元相同。

eg:    此處只寫後八位

          000 001 01   -->a

          000 001 10   -->b

          000 001  00  -->result

2,“按位或”運算

       "按位或“運算的運算子為“1”,為雙目運算子。“按位或”運算的運演算法則是:如果兩個運算元對應位都是0,則結果位才是0,否則是1。如果兩個運算元的精度不同,則結果的精度與精度高的運算元相同。

eg:     000 001 01   -->a

          000 001 10   -->b

          000 001 11 -->result

3,”按位取反“運算

       “按位取反“運算也稱“按位非“運算,運算子為”~“,為單目運算子,”按位取反“就是將運算元二進位制中的1修改為0,0修改為1。

eg:     000 001 01   -->a

          111 110 10 -->result

4,“按位異或”運算

      “按位異或“運算的運算子為"^",為雙目運算子。“按位異或”運算的運演算法則是:當兩個運算元的二進位制表示相同(同為1或者同為0)時,結果為0,否則結果為1。如果兩個運算元的精度不同,則結果的精度與精度高的運算元相同。

eg:     000 001 01   -->a

          000 001 10   -->b

          000 000 11 -->result

5,移位操作

      除上述運算子外,還可以對資料按二進位制位進行位移操作。位移操作運算子有以下三種:

      <<: 左移

      >>: 右移

      >>>: 無符號右移

     左移:就是將左邊對運算元在記憶體中對二進位制資料左移右邊運算元指定的位數,左邊移空的部分補0。

     右移:如果最高位是0,左移空的位就填入0,如果最高位是1,右移空的位就填1

     無符號右移,無論最高位是1還是0,左側被移空的高位都填0

移位運算子適用的資料型別有:byte,short,int,long,char

移位可以實現整數除以或者乘以2^n的效果,例如y<<2 與y*4的結果相同;y>>1的結果與y/2的結果相同,總之,一個數左移n位,就是這個數乘以2^n;一個數右移n位就是將蒸熟除以2^n。