Java I/O : Bit Operation 位運算

Writer      :BYSocket(泥沙磚瓦漿木匠) java

微         博:BYSocket 算法

豆         瓣:BYSocket socket

FaceBook:BYSocket 加密

Twitter    :BYSocket spa

泥瓦匠喜歡Java,文章老是扯扯Java。 I/O 基礎,就是二進制,也就是Bit3d

1、Bit與二進制

什麼是Bit(位)呢?位是CPU處理或者數據存儲最小的單元。相似於很小很小的開關,一開一關,表示爲1或者0。因此,這就是計算機處理任何數據的「細胞」,要謹記。 code

而二進制,只是計算界一種規範和約定,準確的說是一種數制。唸叨着「逢二進一」,這實際上是一種算法。如圖 內存

image

2、位運算

說完了前面兩點,泥瓦匠帶你走向位運算的概念。數在內存中以二進制存儲。位運算,也就是二進制運算,其實就是對數在內存的二進制直接操做的過程。這裏有人發問了, get

Q:都是1+1,位運算不見得結果不一樣吧。 it

A:這個問得好。位運算在常見的場景下是凸顯不了好處的。而在特定下,一者計算方便,速度快,支持面廣。好比我舉幾個例子,能夠利用位運算判斷值的奇數偶數,還有某些特定的算法好比壓縮,加密算法嚴重依賴位算法。兩者其存儲字節小,好比在文件的權限(讀,寫等)都是用位來表示的。

上面,用小對話形式和舉例一塊兒說明了位運算。下面開始實戰。

3、操做符實戰

1、位運算與 & { 兩位全1,結果才爲1 } 如圖:

bitwise-and

做用

① 清零。若是特定段位須要清0,則其餘段與各位爲0 與運算便可。0xFF & … 可使靠右8位的其餘都清0

② 取一個數中的指定位。1010 1110 & 0xF 能夠得到 1010 1110的低4位。

2、位運算或 | { 只要有個1,結果就爲1 } 如圖:

bitwise-or

做用:用於補1,哪裏須要1就補哪裏。

3、異或運算 ^{ 兩個響應位不一樣,則爲1 }

做用: 特定位翻轉 1010 1110 ^ 0xF = 1010 0001

4、移位運算 左移和右移

」 < <」 左移:右邊空出的位上補0,左邊的位將從字頭擠掉,其值至關於乘2。如圖:

shift-left

右移就不重複了。

這裏再增長一個解決上面泥瓦匠提到的怎麼判斷奇數偶數。

// Is it odd?
(value & 0x1) > 0
// Is it divisible by two (even)?
(value & 0x1) == 0

 

4、總結

Bit 位雖小可是基石,滴水穿石。水滴-位,值得咱們好好了解。這裏複雜的壓縮算法這些,之後寫到算法再說。

要點:

概念

操做符運算

Writer      :BYSocket(泥沙磚瓦漿木匠)

微         博:BYSocket

豆         瓣:BYSocket

FaceBook:BYSocket

Twitter    :BYSocket

相關文章
相關標籤/搜索