1. 程式人生 > 實用技巧 >【NOIP2016提高組複賽】蚯蚓

【NOIP2016提高組複賽】蚯蚓

八大基本資料型別

整數

  • byte /1位元組
  • short /2位元組
  • int /4位元組
  • long /8位元組 (定義long型別要在數字後面加L)

注意:

  1. 整數的進位制問題:二進位制(0b)、十進位制、八進位制(0)、十六進位制(0x)
  2. 在C和C++中,int表示的整型和目標機器相關,整型資料依賴於具體的作業系統。而在Java中,所有的數值型別所佔據的位元組數量與平臺無關。
  3. Java沒有任何無符號型別。

小數:浮點數

  • float 4位元組 (float型別要在數字後面加個F)
  • double 8位元組

注意:

  1. 所有的浮點數值計算都遵循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;
    
  2. 最好避免使用浮點數進行比較。

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. 浮點數值不適用于禁止出現舍入誤差的金融計算中。其主要原因是浮點數值採用二進位制系統表示,而在二進位制系統中無法精確的表示分數1/10。

如果需要在數值計算中不含有任何舍入誤差,就應該使用BigDecimal類。

java中的大數值

如果基本的整數和浮點數精度不能夠滿足需求,那麼可以使用java.math包中的兩個很有用的類:

BigIntegerBigDecimal.

這兩個類可以處理包含任意長度數字序列的數值.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不是關鍵字)

注意:

  1. Java採用16位的Unicode字符集,範圍從\u0000~\uFFFF
  2. 字符集與編碼,參考國棟的博文

布林型

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位元組