Java中關於數學運算
阿新 • • 發佈:2021-10-22
Java中關於數學運算
- Java中浮點數除以 0 產生的結果
public static void main(String[] args) {
var i = 15.0;
var x = i/0;
System.out.println(getType(x));
System.out.println(x);
}
private static String getType(Object o) {
return o.getClass().getName();
}
輸出結果
java.lang.Double
Infinity
- Java中 int 型別運算結果超出最大值
public static void main(String[] args) {
var i = 1000000000;
System.out.println(3 * i);
}
對於上面這個程式,控制檯輸出的結果是:-1294967296。結果顯然是錯誤的
數學運算子只是悄悄地返回錯誤的結果而不做任何提醒。
Java中,當用一個運算子連線兩個值時,先要將兩個運算元轉換為同一型別,然後再進行操作。
如果兩個運算元中有一個是double型別,另一個運算元就會被轉換為double型別
否則,如果其中一個是float型別,另一個運算元就會被轉換為float型別
否則,如果其中一個是long型別,另一個運算元就會被轉換為long型別
否則,兩個運算元都會被轉換為int型別。
要注意,兩個byte型別的數相加,其結果是一個int型別,而不是一個byte型別。
- 強制型別轉換通過截斷小數部分將浮點值轉換為整型。
>>
和<<
分別表示右移運算子和左移運算子,>>>
表示無符號右移運算子,
>>>
會用0填充高位,這與>>
不同,它會用符號位填充高位,不存在<<<
操作符。
移位運算子的右運算元要完成模32運算(除非左運算數是long型別,這種情況下右運算元要模64)。例如:1<<35等同於1<<3
-
同一個級別的運算子按照從左向右的次序進行計算(右結合運算子除外)
參考資料:
[1] Cay S.Horstmann 著,林琪 蘇鈺涵等譯.Java核心技術 卷1(原書第11版).北京:機械工業出版社,2020:37-44.
[2] 百度百科.移位運算子.https://baike.baidu.com/item/移位運算子