Java編程基礎-運算符


Java中的運算符大致分為:算術運算符、賦值運算符、關系運算符、邏輯運算符和位運算符五類。

(1)、算術運算符:+  -  *  /  %  ++  --

(2)、賦值運算符:=  +=  -=  *=  /=  %=

(3)、關系運算符:==  !=  >  >=  <  <=

(4)、邏輯運算符:&  |  !  ^   &&   ||

(5)、位運算符:&  |  ~  ^  <<  >>  >>>


一、算術運算符

按照操作數數目分為單目運算符(一元運算符)和雙目運算符(二元運算符)。

1、單目運算符,只有一個操作數。

單目運算符有: + (正)  - (負)  ++  (自增)   --  (自減)。

++  (自增) 和--  (自減)放在操作數前面,稱為前自增(自減),要先對被操作數作自增1或自減1運算,再進行其它的運算操作。

反之,++  (自增) 和--  (自減)放在操作數后面,稱為后自增(自減),要先進行其它運算,再進行自增1或自減1運算。

 

[java] view plain copy
  1. public class Demo {  
  2.   
  3.     public static void main(String[] args) {  
  4.         int a = 5;  
  5.         int x, y;  
  6.         x = +a;// 正值  
  7.         System.out.println("x=" + x);// 打印結果:x=5  
  8.         y = -a;// 負值  
  9.         System.out.println("y=" + y);// 打印結果:y=-5  
  10.   
  11.         // 前自增  
  12.         int i = 5;  
  13.         System.out.println("++i=" + (++i));// 打印結果:++i=6  
  14.         System.out.println("i=" + i);// 打印結果:i=6  
  15.         // 后自增  
  16.         i = 5;  
  17.         System.out.println("i++=" + (i++));// 打印結果:i++=5  
  18.         System.out.println("i=" + i);// 打印結果:i=6  
  19.         // 前自減  
  20.         int j = 12;  
  21.         System.out.println("--j=" + (--j));// 打印結果:--j=11  
  22.         System.out.println("j=" + j);// 打印結果:j=11  
  23.         // 后自減  
  24.         j = 12;  
  25.         System.out.println("j--=" + (j--));// 打印結果:j--=12  
  26.         System.out.println("j=" + j);// 打印結果:j=11  
  27.     }  
  28.   
  29. }  

2、雙目運算符,有兩個操作數,運算符在操作數之間。

雙目運算符有: + (加)  - (減)  * (乘)  / (除)  % (求余或者取模)。

三點注意

(1)、在java程序中的運算符不可以省略,在數學上y=2x,可以省略乘號,但java里必須寫y=2*x;

(2)、在進行除法運算時,當除數和被除數都是整數時,得到的結果也是一個整數(會忽略小數部分)。如果除法運算有小數參與,得到的結果會是一個小數.

(3)、在進行求余(%)運算時,運算結果的正負取決於被模數(%左邊的數)的符號,與模數(%右邊的數)的符號無關。如:-5%3=-2;而5%-3=2;

求余記住:任意正整數%2,結果要么是0,要么是1,用於切換條件。左邊如果小於右邊,結果是左邊。左邊如果等於右邊,結果是0。右邊是1,結果為0。

 

[java] view plain copy
  1. public class Demo {  
  2.   
  3.     public static void main(String[] args) {  
  4.         int x = 5, y = 12;  
  5.         System.out.println(x + "+" + y + "=" + (x + y));// 相加結果:5+12=17  
  6.         System.out.println(x + "-" + y + "=" + (x - y));// 相減結果:5-12=-7  
  7.         System.out.println(x + "*" + y + "=" + (x * y));// 相乘結果:5*12=60  
  8.         System.out.println(y + "/" + x + "=" + (y / x));// 相除結果:12/5=2  
  9.         // 求余  
  10.         System.out.println(5 % -3);// 模數為負數求余結果:2  
  11.         System.out.println(-5 % 3);// 被模數為負數求余結果:-2  
  12.         System.out.println(12 % 5);// 普通求余結果:2  
  13.         System.out.println(12 % 2);// 模數為2求余結果:0  
  14.         System.out.println(12 % 1);// 模數為1求余結果:0  
  15.         System.out.println(12 % 12);// 被模數與模數相等求余結果:0  
  16.         System.out.println(5 % 6);// 被模數小於模數求余結果:5  
  17.   
  18.     }  
  19.   
  20. }  


二、賦值運算符

賦值運算符的作用就是將常量、變量或表達式的值賦給某一個變量。

賦值運算符有:

= (賦值,注意與==區別)  把等式右邊的值賦給等式左邊的變量。

+= (加等)把等式左右兩邊的值相加之后的值賦給左邊的變量。  

-= (減等)   把等式左右兩邊的值相減之后的值賦給左邊的變量。

*=  (乘等) 把等式左右兩邊的值相乘之后的值賦給左邊的變量。

/=  (除等) 把等式左右兩邊的值相除之后的值賦給左邊的變量。

%= (模等) 把等式左右兩邊的值求余之后的值賦給左邊的變量。

三點注意

(1)、在java中可以通過一條賦值語句對多個變量進行賦值。示例:
int x,y,z;
x=y=z=5;//為三個變量同時賦值。
錯誤寫法:int x=y=z=5;

(2)、除了=,其它都是特殊的賦值運算符,以+=為例,x+=3就相當於x=x+3,首先會進行加法運算x+3,再將運算結果賦值給變量x。其它賦值運算符都可以此類推。

(3)、在使用+=、-=、*=、/=、%=運算符進行賦值時,強制類型轉換會自動完成,程序不需要做任何顯示的聲明。


三、關系運算符

關系運算符用於對兩個數值或變量進行比較,其結果是一個布爾值,即true或false。

關系運算符有:==(相等)  !=(不等)   >(大於)   >= (大於等於)   <(小於)   <=(小於等於)

注意:不能將關系運算符==寫成賦值運算符=,二者是不同的運算符,運算結果是不同的。切記!

 

[java] view plain copy
  1. public class Demo {  
  2.   
  3.     public static void main(String[] args) {  
  4.   
  5.         System.out.println(12 == 21);// 判斷是否相等,結果為:false  
  6.         System.out.println(5 != 6);// 判斷是否不相等,結果為:true  
  7.         System.out.println(4 > 3);// 判斷4是否大於3,結果為:true  
  8.         System.out.println(4 >= 4);// 判斷4是否大於等於4,結果為:true  
  9.         System.out.println(3 < 5);// 判斷3是否小於5,結果為:true  
  10.         System.out.println(6 <= 5);// 判斷6是否小於等於5,結果為:false  
  11.   
  12.     }  
  13.   
  14. }  


四、邏輯運算符

邏輯運算符用於對布爾型的數據進行操作,其結果仍是一個布爾型。

邏輯運算符有:

&(與):兩邊都為真結果為真,否則為假。   

|(或)  :兩邊只要有一個為真,結果為真,否則為假。

! (非)  :非真則為假,非假則為真。

^ (異或)   :兩邊相同則為假,兩邊不同則為真。

&&(短路與) :兩邊都為真結果為真,否則為假。

||(短路或):兩邊只要有一個為真,結果為真,否則為假。

特別注意:

&與&&的區別:&無論左側條件為真還是為假,都會計算判斷右側的條件。而&&當左側條件為假時,不會計算判斷右側的條件,當左側為真,才會繼續判斷右側的條件。因為與運算結果為真必須滿足左右兩邊條件都為真。

|與||的區別:|無論左側條件為真還是為假,都會計算判斷右側的條件。而||當左側條件為真時,不會計算判斷右側的條件,當左側為假時,才會繼續判斷右側的條件。因為或運算結果為真只要滿足一邊為真即可。

程序開發中建議使用&&(短路與) 和||(短路或),提高執行效率。

 

[java] view plain copy
  1. public class Demo {  
  2.   
  3.     public static void main(String[] args) {  
  4.         // !非 真變假,假變真  
  5.         System.out.println(!(12 > 21));// 結果為:true  
  6.         System.out.println(!true);// 結果為:false  
  7.         // ^異或 兩操作數一真一假,結果才為真,否則為假  
  8.         int x = 18;  
  9.         System.out.println(x >= 18 ^ x < 18);// 結果為:true  
  10.         System.out.println(x < 18 ^ x == 18);// 結果為:true  
  11.         System.out.println(x != 18 ^ x > 18);// 結果為:false  
  12.         System.out.println(x == 18 ^ x <= 18);// 結果為:false  
  13.         // 邏輯與&、短路與&& 兩操作數同真,結果為真,否則為假  
  14.         int y = 5;  
  15.         System.out.println(y > 5 & y <= 5);// 結果為:false  
  16.         System.out.println(y >= 5 && y < 5);// 結果為:false  
  17.         System.out.println(y != 5 & y < 5);// 結果為:false  
  18.         System.out.println(y == 5 && y <= 5);// 結果為:true  
  19.         // 邏輯或|、短路或|| 兩操作數同假,結果為假,否則為真  
  20.         int z = 2;  
  21.         System.out.println(z != 18 | z > 18);// 結果為:true  
  22.         System.out.println(z >= 18 || z == 18);// 結果為:false  
  23.         System.out.println(z <= 18 | z > 18);// 結果為:true  
  24.         System.out.println(z != 18 || z == 18);// 結果為:true  
  25.         // 短路與測試  
  26.         int i1 = 18;  
  27.         System.out.println(i1 != 18 && i1++ > 18);// 結果為:false  
  28.         System.out.println("i1:" + i1);// 由於左邊條件為false,所以右邊的表達式未作判斷,i1結果為:18  
  29.         int i2 = 18;  
  30.         System.out.println(i2 != 18 & i2++ > 18);// 結果為:false  
  31.         System.out.println("i2:" + i2);// 左邊條件為false,右邊依然需要判斷,i1結果為:19  
  32.         // 短路或測試  
  33.         int j1 = 18;  
  34.         System.out.println(j1 == 18 || j1++ > 18);// 結果為:true  
  35.         System.out.println("j1:" + j1);// 由於左邊條件為true,所以右邊不作判斷,j1結果為:18  
  36.         int j2 = 18;  
  37.         System.out.println(j2 == 18 | j2++ > 18);// 結果為:true  
  38.         System.out.println("j2:" + j2);// 左邊條件為true,右邊依然需要判斷,j2結果為:19  
  39.     }  
  40.   
  41. }  

奉上邏輯運算符真值表:



五、位運算符

位運算符是針對二進制數的每一位進行運算的符號,它是專門針對數字0和1進行操作的。

位運算符有:&(按位與) |(按位或) ~(取反) ^(按位異或) <<(左移)  >>(右移)  >>>(無符號右移)

位運算操作的真值表與邏輯運算符的真值表完全相同。只是位運算的操作數和結果都是二進制整數。

(1)、按位與運算符“&”是將參與運算的兩個二進制數進行與運算,如果兩個二進制位都為1,則該位的運算結果為1,否則為0.

例如:將6和11進行與運算,6對應的二進制數是00000110,11對應的二進制數是00001011.具體演算過程如下:

00000110

                 &     00001011

                         00000010

運算結果為00000010,對應數值為2.

(2)、 按位或運算符“|”是將參與運算的兩個二進制數進行或運算,如果二進制位上有一個值為1,則該位的運行結果為1,否則為0.

例如:將6與11進行或運算。

00000110

                 |      00001011

                         00001111

運算結果為00001111,對應的數值是15.

(3)、取反運算符“~”只針對一個操作數進行操作,如果二進制位是0,則取反值為1,如果是1,則取反值為0.

例如:將6進行取反運算。

  ~     00000110                                 

         11111001

運算結果為11111001,對應的數值是-7

(4)、按位異或運算符“^”是將參與運算的兩個二進制數進行異或運算,如果二進制位相同,則值為0,否則為1.

例如:將6和11進行異或運算。

00000110

         ^      00001011

                 00001101

運算結果為00001101,對應數值是13.

一個數異或同一個數兩次,結果還是那個數。

(5)、左移運算符“<<”就是將操作數所有二進制位向左移動一位,運算時,右邊的空位補0,左邊移走的部分舍去。(一個整數向左移動幾位就乘以2的幾次冪),越移越大。

例如:將11左移動一位。

<<1        00001011                                

               00010110

運算結果為00010110,對應數值是22.(亦或是11*2的1次方=22)

(6)、右移運算符“>>”就是將操作數所有二進制位向右移動一位。運算時,左邊的空位根據原數的符號補0或1(原來是負數就補1,是正數就補0)(一個整數向右移動幾位就除以2的幾次冪,高位時0就補0,是1就補1),越移越小。

例如:將11右移一位

>>1        00001011                                

               00000101

運算結果為00000101,對應的數值是5.

(7)、無符號右移運算符“>>>”就是將操作數所有二進制位向右移動一位,左邊的空位補0(即不考慮原數的正負情況,最高位都用0補)

例如:將11無符號右移一位

>>>1      00001011                                

               00000101

運算結果為00000101,對應的數值是5.


特殊的運算符:條件運算符(三目運算符)

格式為:<表達式1>?<表達式2>:<表達式3>

執行流程:先計算表達式1的值,當表達式1為true,則把表達式2的值作為整個表達式的結果;當表達式1為false,則將表達式3的值作為整個表達式的結果。


附運算符優先級表

 

優先級 運算符 結合性
1 . [] () 從左向右
2 ++ -- ~ !(數據類型) 從右向左
3 */ % 從左向右
4 + - 從左向右
5 << >> >>> 從左向右
6 < ><= >= 從左向右
7 == != 從左向右
8 & 從左向右
9 ^ 從左向右
10 | 從左向右
11 && 從左向右
12 || 從左向右
13 ?: 從右向左
14 =  *=  /= %=  +=  -= <<=  >>=  >>>= &=  ^=  /= 從右向左

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM