java之位運算符

    位運算符

前面我們提過,所有的整數類型,除了char外,都是有符號的。JAVA使用補碼錶示二進制數,在補碼錶示中,最高位爲符號位,正數的符號位爲0,負數的符號位爲1

 

 

序號

運算符

含義

1

<< 

左移(移位運算符)

2

>> 

右移(移位運算符)

3

>>> 

無符號右移(移位運算符)

4

~

(取反)(位邏輯運算符)

5

^

異或(位邏輯運算符)

6

&

(位邏輯運算符)

7

|

(位邏輯運算符)

 

注:位運算符只存在於整數之間,前面說過byteshortchar 在運算時都會轉爲int類型,所以這3種類型也可以參與位運算。浮點數不能進行位運算

 

 

 

 

 


上表中7種位運算符中,前3種是移位運算符,後4種是位邏輯運算符。

 

    3個移位運算符

移位運算符有3個:<<>>>>>

    <<左移運算符

例:-2 << 2

解:-2以二進制數表示爲:11111111 11111111 11111111 11111110  整形爲32位。

       左移運算符表示,將這個二進制數往左邊移2位,即在末尾補20

       結果得到二進制數:11111111 11111111 11111111 11111000

       除去符號位轉成10進制數,得8,其符號位爲1,即爲負數,結果爲-8

 

 

    >>右移運算符

例:5 >> 2

解:5以二進制表示爲:00000000 00000000 00000000 00000101

       右移運算符表示,講這個二進制數往右移動2位,即在前面補20,後面多餘的部分移除。

       結果得到二進制數:00000000 00000000 00000000 00000001

       出去符號位轉成10進制數,得1,其符號位爲0,即爲正數,結果爲1

 

    >>>無符號右移

無符號右移動,即忽略符號位,將二進制數轉成十進制數時也將符號位的10計算在內

1-2 >>> 5

解: -2以二進制數表示爲:11111111 11111111 11111111 11111110

        將這個二進制數往右移5位,即得:00000111 11111111 11111111 11111111

        忽略符號位,再轉爲十進制數得到結果:134217727

 

25 >>> 2

解: 5以二進制數表示爲:00000000 00000000 00000000 00000101

        將這個二進制數往右移3位,即得:00000000 00000000 00000000 00000001

        忽略符號位,再轉爲十進制得到結果:1

 

    4個位邏輯運算符號

位邏輯運算符有4個:^ ~ & |

    ^異或運算符

異或運算先查看兩個數的二進制表示值,並執行按位異或。按位異或的計算方法爲,當且僅當只有一個數的二進制數的某位爲1時,結果的該位才爲1,否則結果的該位爲0

1 5 ^ 3

解:5的二進制表示: 00000000 00000000 00000000 00000     101  (前面爲符號位)

       3的二進制表示: 00000000 00000000 00000000 000000     11

           結果爲   00000000 00000000 00000000 00000     110

       結果轉成10進制數爲:6

 

2 -5 ^ 2

解:-5的二進制表示:11111111 11111111 11111111 11111     101

       2的二進制表示:00000000 00000000 00000000 00000    010

              結果爲:       11111111 11111111 11111111 11111     111

       結果轉成十進制數爲:-7

 

    ~取反運算符

取反運算符,顧名思義,取反運算符就是把某個二進制表示數中的1變成00變成1

例: ~4

解: 4的二進制數表示爲: 00000000 00000000 00000000 00000  100 (前面爲符號位)

              取反爲:              11111111 11111111 11111111 11111    011

              轉成十進制數爲:-5

 

    &邏輯與運算符

邏輯與運算最直觀的運算規律爲: 0 0

即兩個二進制數進行邏輯與運算時,在相同位數上只要有0,則結果的相同位上得0

13 & 5

解:3 的二進制表示爲:00000000 00000000 00000000 00000011

       5 的二進制表示爲:00000000 00000000 00000000 00000101

       邏輯與運算結果爲:00000000 00000000 00000000 00000001

       轉成十進制數結果爲: 1

 

2 -3 & 5

解:-3的二進制表示爲:11111111 11111111 11111111 111111    11

        5的二進制表示爲:00000000 00000000 00000000 00000  101

        邏輯與運算結果爲:00000000 00000000 00000000 00000 101

        轉成十進制數結果爲: 5

 

    | 邏輯或運算符

邏輯或運算最直觀的運算規律爲:11

即兩個二進制數進行邏輯或運算時,在相同位數上只要有1,則結果的相同位上得1

1 4 | 3

解: 4的二進制表示爲: 00000000 00000000 00000000 00000100

        3的二進制表示爲: 00000000 00000000 00000000 00000011

       邏輯或運算結果爲: 00000000 00000000 00000000 00000111

       轉成十進制數結果爲: 7

 

2 -2 | 4

解: -5 的二進制表示爲: 11111111 11111111 11111111 11111110

        4的二進制表示爲: 00000000 00000000 00000000 00000100

       邏輯或運算結果爲: 11111111 11111111 11111111 11111110

       轉成十進制數結果爲: -2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章