java位運算--基礎(不按期更新)

        通常狀況下,編寫web應用可能不多接觸到位運算場景,可是一旦編寫偏底層的框架如hadoop ipc、lucene、數據壓縮等位運算必須熟練掌握。java

一、按位取反(~)web

    將每一個位的值1變0,0變1。如byte val=1;   那麼~val=-2。因爲java採用補碼,若是須要獲得正數的負數就須要將正數按位取反再加1,能夠驗證-val=~val+1=-1。框架

二、按位異或(^)oop

    只有位的值不一樣纔等於1不然爲0。如0000_0001^0000_0010=0000_0011。小技巧a ^ -1 ^ -1 =a,在zigzag編碼中有實際應用。編碼

三、按位與(&)ip

   只有位上值都爲1時纔等於1不然爲0。 0&0=0;    1&1=1;    1&0=0;    0&1=0;hadoop

四、按位或(|)技巧

其中有一位數值爲1結果等於1不然爲0。1 | 0=1;0 | 1=1;0|0=0; 1| 1=1;lucene

五、移位運算數據

無論是左移、右移、仍是無符號右移,對於移動的位數超過32或者64時,都是對32或者64取餘後的數進行移位的。右移至關於做除法運算不會改變運算符號,正數右移到最後會變成0,負數右移到最後會變成-1。無符號右移對於負數而言就不一樣了,由於它始終在最前面補0,那麼負數最後會變成正數,移到最後也會變成0。

相關文章
相關標籤/搜索