關於位運算,之前也見過,搜過,當時會用了,事後就忘了,今天好好學習一遍,而後整理一下。html
Java中的位運算,涉及到計算機的二進制,位用bit表示,1Byte=8bit,根據各類基本數據類型佔用的字節空間,能夠計算各類數據有多少二進制,能夠算出對應的取值範圍。java
java中的位運算包括:與(&)、或(|)、異或(^)和非(~);學習
移位運算包括:左移運算(<<)、右移運算(>>)和無符號右移運算(>>>),沒有無符號左移運算。htm
前提:數字與數字位運算,都會先裝換成二進制,下面不在重複,都默認轉成二進制。get
一、與(&)運算,兩個數字與運算就是對比相同位的數字,都爲1則爲1,不然爲0.it
舉例:3&4的值爲多少? 3的二進制11,4的二進制100,沒數字用0補齊,則是011對100,沒有都爲1的狀況,則3&4的二進制結果爲000,轉換10數據類型
進制也爲0.二進制
二、或(|)運算,兩個數字對比以後,有一個爲1則爲1。數據
舉例:3|4的值爲多少? 011對100,結果爲111,轉換爲10進製爲7。計算機
三、異或(^)運算,對比以後,不一樣的爲1,相同的爲0。
舉例:3^4的值爲多少?011對100,結果爲111,轉換爲10進製爲7。
四、非(~)也叫取反運算,1變0,0變1。具體的變化這裏設涉及到原碼反碼和補碼,我單獨寫個帖子。
五、左移運算符(<<),將二進制的數據向左移動對應位數,低位用0補齊。
舉例:3<<1,11變爲110,轉換爲10進制變爲6。
六、右移運算符(>>),將二進制的數據向右移動對應位數,若是是正數高位用0補齊,負數高位用1補齊。
舉例:3>>1,11變爲1,轉換爲10進制變爲1。-3>>1 爲-2.
七、無符號右移運算(>>>),將二進制的數據向右移動對應位數,高位所有用0補齊。
舉例:3>>>1,11變爲1,轉換爲10進制變爲1。-3>>>1 爲2147483646。