【NOIP2016提高組複賽】蚯蚓
阿新 • • 發佈:2021-01-21
八大基本資料型別
整數
- byte /1位元組
- short /2位元組
- int /4位元組
- long /8位元組 (定義long型別要在數字後面加L)
注意:
- 整數的進位制問題:二進位制(0b)、十進位制、八進位制(0)、十六進位制(0x)
- 在C和C++中,int表示的整型和目標機器相關,整型資料依賴於具體的作業系統。而在Java中,所有的數值型別所佔據的位元組數量與平臺無關。
- Java沒有任何無符號型別。
小數:浮點數
- float 4位元組 (float型別要在數字後面加個F)
- double 8位元組
注意:
所有的浮點數值計算都遵循IEEE 754規範,用於表示溢位和出錯情況的三個特殊的浮點數值:
- 正無窮大
- 負無窮大
- NaN(不是一個數字)
例如,一個正整數除以0的結果為正無窮大。計算0/0或者負數的平方根結果為NaN。
//Double: public static final double POSITIVE_INFINITY = 1.0 / 0.0; public static final double NEGATIVE_INFINITY = -1.0 / 0.0; //Float: public static final float POSITIVE_INFINITY = 1.0f / 0.0f; public static final float NEGATIVE_INFINITY = -1.0f / 0.0f; //NaN public static final double NaN = 0.0d / 0.0;
最好避免使用浮點數進行比較。
public class Num { public static void main(String[] args) { float f = 0.1f; //0.1 double d = 1.0 / 10; //0.1 System.out.println(f == d); //false float d1 = 23232323232323232f; float d2 = d1 + 1; System.out.println(d1 == d2); //true } }
- 浮點數值不適用于禁止出現舍入誤差的金融計算中。其主要原因是浮點數值採用二進位制系統表示,而在二進位制系統中無法精確的表示分數1/10。
如果需要在數值計算中不含有任何舍入誤差,就應該使用BigDecimal類。
java中的大數值
如果基本的整數和浮點數精度不能夠滿足需求,那麼可以使用java.math包中的兩個很有用的類:
BigInteger
和BigDecimal
.這兩個類可以處理包含任意長度數字序列的數值.BigInterger類實現了任意精度的整數運算,BigDecimal實現了任意精度的浮點數運算.
使用靜態的valueOf方法可以將普通的數值轉換為大數值:
BIgInteger a = BigInteger.valueOf(100)
不能使用常用的算術運算子(如:+和*)等處理大數值.而需要使用大數值類中的add和multiply方法
BigInteger a = BigInteger.valueOf(100); BigInteger b = BigInteger.valueOf(2); BigInteger c = a.add(b); BigInteger d = a.multiply(b);
字元型
- char 2位元組 (String不是關鍵字)
注意:
- Java採用16位的Unicode字符集,範圍從\u0000~\uFFFF
- 字符集與編碼,參考國棟的博文
布林型
boolean只有兩個值:true、false,可以使用1bit來儲存,但是具體大小沒有明確規定。
JVM會在編譯時期將boolean型別的資料轉換成int,用1來表示true,用0來表示false。
boolean型別被編譯為int型別,等於是說JVM裡佔用位元組和int完全一樣,int是4個位元組,於是boolean也是4位元組
boolean陣列在Oracle的JVM中,編碼為byte陣列,每個boolean元素佔用8位=1位元組