■ 資料型態
◇ 資料型態包括:
A) 基本資料型態
B) 參考型態
class types
interface types
array types
※[註]
1> numeric data types 中,除了char 為唯一的 unsigned integral type 外,其餘皆為 signed integral type
2> 型態的表示
‧long -數字後加上 l 或 L。例: 200L
‧float -數字後加上 f 或 F。例: 20.7f
‧double -數字後加上 d 或 D。如: 300D
‧boolean 型態只有 true 和 false 值
‧String literals 為 String objects,並非 primitives,為包含在雙引號(double quotes) 內的 characters
‧backslash (\) 為 Java 的 escape code character
‧Unicode characters 的表示法可用 \u 後加 4 個 hexadecimal digits (\u0000 到 \uffff),Unicode 字元可出現在任何地方
[範例]
\r 代表 carriage return
\' 代表 single quote
[範例]
ch\u0061r a = 'a';
char \u0062 = 'b';
char c = '\u0063';
3> Octal literals 以 0 開頭(阿拉伯數字中的 0),Hex literals 以 0X 或 0x 開頭
[範例] 合法的 16 進位數字(hexadecimal)
0x0001、0x7ffffffff、0xDeadCafe
◇ 浮點數
1. 實數(浮點數)的表示方式
A) 實數的表示法採用所謂的科學記號表示法:
(1)S:正負號 (2)F:有效位數 (3)E:指數
S × F ±E
B) 十進位與二進位表示法
十進位 ± d.dddddd × 10E
二進位 ± 1.bbbbbbb × 2E 在計算機中採用的是二進位科學記號表示方式
C) 浮點數的儲存
‧單精確度浮點數 float
二進位浮點數小數點前一位必然為 1,可以不用儲存,所以雖然只有 23 位,實質上可以表示 24 位的有效小數位數。
單精確度浮點數最大為 3.40282347e+38f,最小為1.40239846e-45f
最大 0111 1111 0111 1111 1111 1111 1111 1111
最小 0000 0000 0000 0000 0000 0000 0000 0001
‧雙精確度浮點數 double
Sign:0 → positive,1 → negative
Exponent:excess-127 format for float,excess-1023 format for double.
指數採用超過某一數值(Excess Number-excess 127), 而不用負數
‧ Float:Emin = -126, Emax = 127
‧ Double:Emin = -1022, Emax = 1023
真正的指數值加 127 為儲存的指數值
2. 特殊值
‧正負無限大 如 1f/0f
POSITIVE_INFINITY:以所有 exponential-bits 為 1,其餘 bits 為 0 表示。
NEGATIVE_INFINITY:以 sign-bit 為1,所有 exponential-bits 為 1,所有 mantissa-bits 為 0 表示。
[範例]
1.0 / -0.0 = -Infinity
1.0 / 0.0 = Infinity
0.0 / 0.0 = NaN
‧±0
使用所有 bits 皆為 0 表示
‧NaN(Not a Number) 非法的浮點數運算結果(不會產生例外),如 0.0/0.0
以 sign-bit 為 0,所有 exponential-bits 為 1, mantissa-bits 中左側第一個為 1 其餘為 0 表示。
2. Java 並沒有提供以十進位為底之外的浮點直譯字(literal) 表示法。
類別 Float 的方法 intBitsToFloat 和類別 Double 的方法 longBitsToDouble 提供了以十六進位或八進位整數直譯
字的用語來表示浮點值的方式。
[範例]
Double.longBitToDouble(0x400921FB54442D18L) 等於 Math.PI 的值。
3. 有效位數問題
◇ Literals
1. char literals 為包含在單引號內的字元,或是以 \u 開頭的 unicode 值
2. number 預設為 int literal,decimal number 預設為 double literal
3. 1E-5d 為合法的 double literal,E2d 不是(以 letter 開頭,compiler 會認為它是 identifier)