整數(shù)運算即使是除法運算鸠按,也是精確的目尖,兩個整數(shù)相除只能得到結果的整數(shù)部分扎运。
int x = 12345 / 67; //184
求余運算用%
int y = 12345 % 67; //17
注意:整數(shù)的除法對于除數(shù)為0時運行時將報錯饮戳,但編譯不會出錯扯罐。
1.溢出
計算結果超出范圍會發(fā)生溢出烦衣,但不會出錯,會得到奇怪的結果启泣。
public class Main{
public static void main(String[] args){
int x = 2147483640;
int y = 15;
int sum = x+y;
System.out.println(sum);//-2147483641
}
}
可以用轉換成二進制的方法來看這個問題寥茫。
將類型變?yōu)閘ong型矾麻,結果就不會溢出。
2.自增/自減
++n: 先加1再引用n
n++: 先引用n再加1
3.移位運算
int n = 7;
int a = n << 1;// 整數(shù)7左移一位得到整數(shù)14
int b = n << 2;// 整數(shù)7左移兩位得到整數(shù)28
int a = n >> 1;//整數(shù)7右移一位得到整數(shù)3
int b = n >> 2;//整數(shù)7右移兩位得到整數(shù)1
int n = -536870912;//對于負數(shù),最高位的1保持不變,仍是負數(shù)弄喘。
int a = n >> 1;//-268435456
int b = n >> 2;//-134217728
int n = -536870912;//使用>>>,符號位跟著動,負數(shù)變正數(shù)
int a = n >>> 1;//1879048192
int b = n >>> 2;//939524096
對于byte和short進行移位時蘑志,會首先轉換為int再進行位移。
4.位運算
按位進行與急但、或搞乏、非和異或的運算。對應的是二進制里面的1和0
異或:兩個數(shù)不同镐躲,結果為1侍筛,否則為0。
5.運算優(yōu)先級
()
!~ ++ --
*/ %
+-
<< >> >>>
&
|
+= -= *= /=
6.類型自動提升與強制轉型
如果參與運算的兩個數(shù)類型不一致勾笆,計算結果為較大類型的整數(shù)。小變大會自動窝爪。
大變衅朊健:強制類型轉換
int i = 12345;
short s = (short) i; //12345
超出范圍的強制轉換會得到錯誤的結果纷跛。