Java運算符優先級順序
圖集說明:
1.算數運算符
補充兩個:
- 單目運算符 正号 +10 10
- 單目運算符 負号 n=10;-n; -10
(1)除法規則 /
若兩個操作數都是整型,結果也是整型,除數不能為0
若兩個操作數有一個是浮點型,結果是浮點型
System.out.println(10/3);
//System.out.println(10/0); //除數不能為0,錯誤
System.out.println(10/3.0); //
System.out.println(10.0/0); //Infinity,正無窮大
System.out.println(-10/0.0); //-Infinity ,負無窮大
(2)取模規則 %
求餘數運算
結果的符号與被取模數有關,與模數無關
System.out.println(5.5 % 3.2);
System.out.println(5 % 0.0); //NaN ,非數
System.out.println(-5 % 0.0); //NaN ,非數
System.out.println(0 % 5.0);
System.out.println(0 % 0.0); //NaN ,非數
//System.out.println(5 % 0);
System.out.println((-5) % 3);
System.out.println(5 % (-3));
2.自增,自減規則
單目運算符
操作數隻能是變量,不能是常量和表達式
分為字首和字尾
字首 先算後用
字尾 先用後算
//int n =1++;
int a =1;
System.out.println(a);
int b = ++a+2;
System.out.println(“a=”+a+",b="+b);
int c = a-- +2;
System.out.println(“a=”+a+",c="+c);
3.指派運算符
規則:
為變量指定值,不能為常量或表達式指派= 符号兩邊的資料類型不一緻時,使用自動類型轉換或強制類型轉換原則處理
int n = 10; //聲明并指派
int a1,b1,c1; // 連續聲明
a1=b1=c1=10; // 多個已聲明變量連續指派
//int x=y=z=10; //錯誤
除了 = 運算符外,都是擴充指派運算符,編譯器先運算在指派
int a2=1;
a2 +=1; // a= ? 表達式等價于?
a2 *=2; // a=? 表達式等價于?
如果兩種類型不相容,或者目标類型小于原型時,要進行強制類型轉換
使用擴充運算符時,強制類型轉換自動完成,不需要顯示強制轉換
byte b3=1;
//b3= b3+1; // 常量1 是int 型,b+1是int 型
b+=1; // 自動完成強制類型轉換
4.關系運算符
結果是布爾型 Boolean
除== 外 其他的運算符都隻能是數值類型
隻要是數值類型,不管資料類型是否相同,都能比較
基本類型的常量和變量不能和引用類型的常量和變量比較
Boolean 類型的常量和變量不能和其他任意類型的常量變量使用== 比較
引用類型之間沒有繼承關系也不能用== 比較
boolean b4 = 1<2.0; //結果為:
//boolean b5 =“0” <= “0”; // < 不支援引用類型比較
boolean b6 =“0” == “0”; // == 支援字元串比較
//boolean b7 = true!=0; //不支援布爾與其他類型比較
boolean b8 = true == false;
5.邏輯運算符
規則:
& 與 && 運算符都是與 兩個操作數都是true 結果才是true,其他為false
& 兩個操作數都進行判斷
&& 前面的為false,後面的不判斷
| 和 || 都表示或操作, 兩個操作數隻要有一個為true 結果就位true,否則為false
| 兩個操作數都進行判斷
|| 前面的為true,後面的不判斷
^ 為異或運算,異1同0
6.位運算符
補充:
<< 左移 00000001<<2 0000 0100
1000 0001 <<2 0000 0100
右移 0000 0100>>2 0000 0001
1000 0100 >>2 1110 0001
無符号右移 0000 0100 >>>2 0000 0001
1000 0100 >>>2 0010 0001
規則:
隻能操作整型變量或常量
& 參與按位與運算的兩個操作數 對應的二進制位同為1 ,則結果為1,否則為0
| 參與按位或運算的兩個操作數對應的二進制位有一個1 ,則結果為1,否則為0
~ 取反
^ 異1 同0
<< 左移 二進制位整體左移指定位數,後邊補0,左邊移出去的舍棄
右移 二進制位整體右移指定位數,左邊填充符号位(正0負1),右邊移出去的舍棄無符号右移 二進制位整體右移指定位數,左邊填充0,右邊的舍棄
對于低于int 型(byte short char)的操作數總是先轉換為int型後再位移
對于int 型的位移,當位移數大于int 位數大于32 時,先用位移數對32求餘,得到的餘數才是真的位移數 a>>33 a>>1
Long 型位移,當位移數大于long 位數64時,先用位移數對64求餘,餘數為實際位移數
int n = -12>>>3;
System.out.println(n);
byte a =-12;
byte b = 3;
byte m =(byte)(a>>>b);
System.out.println(m);