
| 類型 | 位數 | 字節 | 取值範圍 | 默認值 |
|---|---|---|---|---|
byte | 8 | 1 | -128 ~ 127 (-2⁷ ~ 2⁷-1) | 0 |
short | 16 | 2 | -32,768 ~ 32,767 (-2¹⁵ ~ 2¹⁵-1) | 0 |
int | 32 | 4 | -2,147,483,648 ~ 2,147,483,647 (-2³¹ ~ 2³¹-1) | 0 |
long | 64 | 8 | -9.22e18 ~ 9.22e18 (-2⁶³ ~ 2⁶³-1) | 0L |
byte 最小值 -128 的二進制 1000_0000 即為其補碼,無法表示 -129(超出 8 位)。0 開頭(如 011 = 9);十六進制以 0x 開頭(如 0x11 = 17);二進制(JDK 7+)以 0b 開頭。(byte)129 → -127(1000_0001 視為補碼,符號位 1,數值位取反減 1 得 127)。| 類型 | 總位數 | 符號位 | 指數位 | 尾數位 | 指數範圍(移碼) | 近似十進制範圍 | 有效數字 |
|---|---|---|---|---|---|---|---|
float | 32 | 1 | 8 | 23 | -126 ~ +127 | ±3.4E38 | 7~8 位 |
double | 64 | 1 | 11 | 52 | -1022 ~ +1023 | ±1.79E308 | 15~16 位 |

值 = (-1)^符號 × 1.尾數 × 2^(指數-偏移量)。隱含整數位 1 不佔尾數位,故 float 實際精度 24 位(~7.2 十進制位),double 53 位(~15.9 十進制位)。2.2f 在 float 中實為 2.200000047683716;2.25f(二進制 10.01)則精確無誤。float → double 會保留 float 的近似誤差。double d = (double)2.2f 印出 2.200000047683716,而 double d = 2.2 則為最接近 2.2 的 double 值。public static void main(String[] args) {
// 進制與強轉測試
byte b1 = 011; // 八進制 9
byte b2 = -011; // -9
byte b3 = (byte)01111; // 八進制 585 → 截斷為 73
byte b4 = (byte)129; // 十進制 129 → -127
byte b5 = 0x11; // 十六進制 17
byte b6 = -0x11; // -17
// 浮點精度測試
float f = 2.2f;
double d1 = (double)f; // 2.200000047683716
f = 2.25f;
double d2 = (double)f; // 2.25 精確
}
理解補碼與 IEEE 754 存儲細節,是避免數值計算 Bug、優化存儲空間的關鍵。下篇將深入字符、布爾與引用類型。