Java I/O : Bit Operation 位運算


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

微         博:BYSocket

豆         瓣:BYSocket

FaceBook:BYSocket

Twitter    :BYSocket

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

 

一、Bit與二進制

什么是Bit(位)呢?位是CPU處理或者數據存儲最小的單元。類似於很小很小的開關,一開一關,表示為1或者0。所以,這就是計算機處理任何數據的“細胞”,要謹記。

而二進制,只是計算界一種規范和約定,准確的說是一種數制。念叨着“逢二進一”,這其實是一種算法。如圖

image

二、位運算

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

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

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

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

 

三、操作符實戰

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

bitwise-and

作用

① 清零。如果特定段位需要清0,則其他段與各位為0 與運算即可。0xFF & … 可以使靠右8位的其他都清0

② 取一個數中的指定位。1010 1110 & 0xF 可以獲得 1010 1110的低4位。

 

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

bitwise-or

作用:用於補1,哪里需要1就補哪里。

 

三、異或運算 ^{ 兩個響應位不同,則為1 }

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

 

四、移位運算 左移和右移

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

shift-left

右移就不重復了。

 

這里再增加一個解決上面泥瓦匠提到的怎么判斷奇數偶數。

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

 

四、總結

Bit 位雖小但是基石,滴水穿石。水滴-位,值得我們好好了解。這里復雜的壓縮算法這些,以后寫到算法再說。

要點:

概念

操作符運算

 

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

微         博:BYSocket

豆         瓣:BYSocket

FaceBook:BYSocket

Twitter    :BYSocket

 

 

 


免責聲明!

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



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