標籤:
Writer :BYSocket(泥沙磚瓦漿木匠)
微 博:BYSocket
豆 瓣:BYSocket
FaceBook:BYSocket
Twitter :BYSocket
泥瓦匠喜歡Java,文章總是扯扯Java。 I/O 基礎,就是二進位,也就是Bit。
一、Bit與二進位
什麼是Bit(位)呢?位是CPU處理或者資料存放區最小的單元。類似於很小很小的開關,一開一關,表示為1或者0。所以,這就是電腦處理任何資料的“細胞”,要謹記。
而二進位,只是計算界一種規範和約定,準確的說是一種數制。念叨著“逢二進一”,這其實是一種演算法。
二、位元運算
說完了前面兩點,泥瓦匠帶你走向位元運算的概念。數在記憶體中以二進位儲存。位元運算,也就是二進位運算,其實就是對數在記憶體的二進位直接操作的過程。這裡有人發問了,
Q:都是1+1,位元運算不見得結果不同吧。
A:這個問得好。位元運算在常見的情境下是凸顯不了好處的。而在特定下,一者計算方便,速度快,支援面廣。比如我舉幾個例子,可以利用位元運算判斷值的奇數偶數,還有某些特定的演算法比如壓縮,密碼編譯演算法嚴重依賴位演算法。二者其儲存位元組小,比如在檔案的許可權(讀,寫等)都是用位來表示的。
上面,用小對話形式和舉例一起說明了位元運算。下面開始實戰。
三、操作符實戰
一、位元運算與 & { 兩位全1,結果才為1 }
作用:
① 清零。如果特定段位需要清0,則其他段與各位為0 與運算即可。0xFF & … 可以使靠右8位的其他都清0
② 取一個數中的指定位。1010 1110 & 0xF 可以獲得 1010 1110的低4位。
二、位元運算或 | { 只要有個1,結果就為1 }
作用:用於補1,哪裡需要1就補哪裡。
三、異或運算 ^{ 兩個響應位不同,則為1 }
作用: 特定位翻轉 1010 1110 ^ 0xF = 1010 0001
四、移位元運算 左移和右移
” < <” 左移:右邊空出的位上補0,左邊的位將從字頭擠掉,其值相當於乘2。
右移就不重複了。
這裡再增加一個解決上面泥瓦匠提到的怎麼判斷奇數偶數。
// Is it odd?(value & 0x1) > 0// Is it divisible by two (even)?(value & 0x1) == 0
四、總結
Bit 位雖小但是基石,滴水穿石。水滴-位,值得我們好好瞭解。這裡複雜的壓縮演算法這些,以後寫到演算法再說。
要點:
概念
操作符運算
Writer :BYSocket(泥沙磚瓦漿木匠)
微 博:BYSocket
豆 瓣:BYSocket
FaceBook:BYSocket
Twitter :BYSocket
Java I/O : Bit Operation 位元運算