Java提供了豐富的運算符,能夠將之分爲四種:算術運算符、位運算符、關係運算符、邏輯運算符ide
算術運算符的操做對象必須是數值類型,不能爲boolean類型使用算術運算符,可是能夠爲char類型使用算術運算符。由於在Java中,char類型在本質上是int的子集。 |運算符|含義| |:--:|:--:| |+|加法(也是一元加號)| |-|減法(也是一元減號)| ||乘法| |/|除法| |%|求模| |++|自增| |- -|自減| |+=|加並賦值| |-=|減並賦值| |=|乘並賦值| |/=|除並賦值| |%=|求模並賦值|編碼
Java定義了幾個位運算符,可用於整數類型——long,int,short,char和byte。 |運算符|含義| |:--:|:--:| |~|按位一元取反| |&|按位與| |||按位或| |^|按位異或| |>>|右移| |>>>|右移零填充| |<<|左移| |&=|按位與並賦值| | |= |按位或並賦值| |^=|按位異或並賦值| |>>=|右移並賦值| |>>>=|右移零填充並賦值| |<<=|左移並賦值|code
在Java中,全部整數類型都由寬度可變的二進制數字表示,除char類型外都是有符號整數,這意味着它們便可表示正數,也能夠表示負數。對象
Java中使用「2的補碼」進行編碼,即負數的表示方法爲:首先反轉數值中的全部位(1變爲0,0變爲1),而後再將結果加1。例如,-42的表示方法爲:經過反轉42中的全部位(00101010),獲得11010101,而後再加1,獲得11010110,即-42。 爲了解碼負數,首先反轉全部位,而後加1。例如,反轉-42(11010110),獲得00101001,即41,再加一則獲得42。it
位邏輯運算符包括&、|、^和~。class
左移運算符「<<」能夠將數值中的全部位向左移動指定的次數,格式爲:擴展
value << num
舉個例子:二進制
public static void main(String[] args) { public static void main(String[] args) { //0011 1100 byte a = 60; // a首先被提高爲int類型,即(0000 0000 0000 0000 0000 0000 0011 1100) // 左移兩位,結果爲(0000 0000 0000 0000 0000 0000 1111 0000),即240 int i = a << 2; // 先左移兩位,結果爲(0000 0000 0000 0000 0000 0011 1100 0000) // 捨棄前三個字節,獲得(1100 0000),即-64 byte b = (byte) (i << 2); System.out.println("i等於:" + i); System.out.println("b等於:" + b); } }
輸出結果是:方法
i等於:240 b等於:-64
由於每次左移都至關於將原始值乘2,因此能夠將之做爲乘法的搞笑替代方法。可是若是將二進制1移進高階位,結果將會變成負數。數據
右移的規則與左移相似,實例代碼以下:
public static void main(String[] args) { //0011 1100 byte a = 60; // a首先被提高爲int類型,即(0000 0000 0000 0000 0000 0000 0011 1100) // 右移兩位,結果爲(0000 0000 0000 0000 0000 0000 0000 1111),即15 int i = a >> 2; // 先右移兩位,結果爲(0000 0000 0000 0000 0000 0000 0000 0011) // 捨棄前三個字節,獲得(0000 0011),即3 byte b = (byte) (i >> 2); System.out.println("i等於:" + i); System.out.println("b等於:" + b); }
執行結果
i等於:15 b等於:3
每次右移一位,至關於將該值除以2,並捨棄全部餘數。能夠利用這一特性實現高效的除法操做。
public static void main(String[] args) { byte a=(byte) 0b11111000; System.out.println("a等於:"+a); int b=a>>1; System.out.println("b等於:"+b); }
執行結果
a等於:-8 b等於:-4
每次移位時,「>>」運算符自動使用原來的內容填充高階位,這個特性能夠保持數值的正負性。可是,有時候對那些非數值的內容進行移位操做,並不關心高階位初始值是多少,只但願用0來填充高階位,這就是無符號右移。
public static void main(String[] args) { //二進制表示(11111111 11111111 11111111 11111111) int a=-1; System.out.println(a); //右移二十四位(00000000 00000000 00000000 11111111) a=a>>>24; //輸出結果是 255 System.out.println(a); }
關係運算符用於斷定一個操做數與另外一個操做數之間的關係。 |運算符|結果| |:--:|:--:| |==|等於| |!=|不等於| |>|大於| |<|小於| |>=|大於等於| |<=|小於等於|
關係運算符用於斷定一個操做數與另外一個操做數之間的關係。 |運算符|結果| |:--:|:--:| |&|邏輯與| |||邏輯或| |^|邏輯異或| ||||短路或| |&&|短路與| |!|邏輯一元非| |&=|邏輯與並賦值| ||=|邏輯或並賦值| |^=|邏輯異或並賦值| |==|等於| |!=|不等於| |?:|三元運算符|