Java中& | ^ ~ 位運算

看hashmap源碼的時候,其中一個indexfor方法讓我大開眼界,取下標的操作實在太騷了,然後又看到一個面試題

13 & 17 結果是什麼?

讓我對Java裏的運算符起了點興趣,特此記錄一下

要了解運算符首先得了解二進制,只記錄一下我的理解

首先看下1到10對應的二進制是多少吧

1 = 1
2 = 10
3 = 11
4 = 100
5 = 101
6 = 110
7 = 111
8 = 1000
9 = 1001
10= 1010 

原先不知道怎麼快速算出二進制,查過資料以後,發現原來是很簡單的一個原理:除2取餘

比如 5,計算過程如下:

5/2 = 2……1
2/2 = 1……0
1/2 = 0……1
最後結果就是101

再隨便舉個例子

比如137,計算過程如下:

137/2 = 68……1
68/2  = 34……0
34/2  = 17……0
17/2  = 8……1
8/2   = 4……0
4/2   = 2……0
2/2   = 1……0
1/2   = 0……1
所以最後結果就是 1000 1001

挺有意思的幾個規律 :第一位肯定是1,最後一位就看奇數偶數了,奇數爲1,偶數爲0

還有很重要的一點 高位補0,二進制是有位數的,8位,16位,32位……

比如1,上面說過 他的二進制是1,那完整的二進制其實是 0000 0001,前7位算高位,是需要補上0的

再講一下二進制轉十進制

 比如13,轉化過程如下:

13 : 1    1    0   1
      2³   2²   2¹  2º  
      8  + 4  + 0 + 1 = 13  

好了 這下二進制的就瞭解完了,還沒看懂的話,建議用紙跟筆親自算一下,很容易理解的

現在開始將位運算符

1.&  與運算

與運算的規則是 兩者都爲1時,才爲1,否則爲0

就拿開頭的13&17來舉例吧:

13的二進制爲  1101

17的二進制爲 10001

13 :  1 1 0 1
17 :1 0 0 0 1
&  :0 0 0 0 1
所以結果就是1

2.| 或運算

或運算的規則是 兩者有1個爲1,那就是1,否則爲0

還拿13 17來舉例:

13 :  1 1 0 1
17 :1 0 0 0 1
|  :1 1 1 0 1
結果爲 11101,轉換爲十進制 那就是1+4+8+16= 29

3.~ 非運算

非運算的規則是 如果位爲0,結果是1,如果位爲1,結果是0

比如13:

13 : 0 0 0 0  1 1 0 1
~  : 1 1 1 1  0 0 1 0
結果爲1111 0010 轉換爲十進制 那就是 0+2+0+0+32+64+128+256 = 482

4.^異或運算

異或運算的規則是:兩者相同則爲0,不同則結果爲1

照舊 13^17:

13 :   1 1 0 1
17 : 1 0 0 0 1
^  : 1 1 1 0 0
結果爲 11100,轉換爲十進制 那就是 0+0+4+8+16=28

 

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