1. 程式人生 > >Java 位運算符 深入理解

Java 位運算符 深入理解

clas 簡單的 二進制 ava white 最簡 bit ont 基於


在Java中存在著這樣一類操作符,是針對二進制進行操作的。它們各自是&、|、^、~、>>、<<、>>>幾個位操作符。不管是初始值是依照何種進制,都會換算成二進制進行位

操作。接下來對這幾種操作符進行一下簡單的解說。

&:

作用是對運算符兩側以二進制表達的操作符按位分別進行‘與‘運算。而這一運算是以數中同樣的位(bit)為單位的。操作的規則是:僅當兩個操作數都為1時。輸出結果才為1。否

則為0,示比例如以下:

12 的二進制為 1100

5 的二進制為 0101

則 12 & 5 的二進制為 0100,則完整的運算式為 12 & 5 = 4;

|:

作用是對運算符兩側以二進制表達的操作符按位分別進行‘或‘運算。而這一運算是以數中同樣的位(bit)為單位的。

操作的規則是:僅當兩個操作數都為0時,輸出的結果才為0。

否則為1,示比例如以下:

12 的二進制為 1100

5 的二進制為 0101

則 12 | 5 的二進制為 1101。則完整的運算式為 12 & 5 = 13;

^

作用是對運算符兩側以二進制表達的操作數按位分別進行‘異或‘運算,而這一運算是以數中同樣的位(bit)為單位的。

異或運算操作的規則是:僅當兩個操作數不同一時候。對應的

出結果才為1,否則為0,示比例如以下:

12 的二進制為 1100

5 的二進制為 0101

則 12 | 5 的二進制為 1001。則完整的運算式為 12 & 5 = 9;

~

‘取反‘運算符~的作用是將各位數字取反:全部的0置為11置為0,示比例如以下:

12 的二進制為 1100

進行取反操作為 10000000 00000000 00000000 00001101

則完整的運算式為 ~12 = -13

<<

左移就是把一個數的全部位數都向左移動若幹位,示比例如以下:

12 的二進制為 1100

則 12 << 1 的二進制為 11000, 則完整的運算式為 12 << 1 = 24;

>>

右移就是把一個數的全部位數都向右移動若幹位,示比例如以下:

12 的二進制為 1100

則 12 >> 1 的二進制為 0110。 則完整的運算式為 12 >> 1 = 6;

>>>

無符號右移一位不足的補0。 示比例如以下:

12 的二進制為 1100

則 12 >> >1 的二進制為 0110, 則完整的運算式為 12 >> 1 = 6;


題外話:位運算是一種基於二進制的運算,涉及到知識包含原碼、反碼、補碼,在此做一個小小的說明,

對於原碼。就是當前數字的二進制表現形式,如-1的原碼是1000 0001。

對於反碼,正數的反碼就是本身。負數的反碼是二進制保留符號位。剩余位取反,比如-1的反碼是1111 1110;

對於補碼,正數的反碼、補碼、原碼都是一樣的,負數的補碼是在其反碼的基礎上+1,比如-1的補碼是1111 1111。


在JDK的原碼中。有很多初始值都是通過位運算計算的,位運算有很多特性,能夠在線性增長的數據中起到作用。且對於一些運算,位運算是最直接、最簡便的方法。

Java 位運算符 深入理解