| 型別 | 大小 |
|---|---|
| bool / char | 1 byte |
| short | 2 bytes |
| int | 2~4 bytes |
| float | 4 bytes |
| double | 8 bytes |
1 byte = 8 bits,可表示 2⁸ 種組合。每個 bit 有權值(2⁰, 2¹ …)。
+7 + (-7) ≠ 0,硬體加法器需特判。char ch = 'A'; // 0x41
short s = ch; // 位元拷貝 + 高位補 0 → 0x0041 (65)
short s = -1; // 0xFFFF
int i = s; // 高位複製符號位 1 → 0xFFFFFFFF (-1 保持不變)
short s = 67; // 0x0043
char ch = s; // 只取低 8 位 → 0x43 ('C'),數值可能改變
關鍵原則:整型賦值永遠是 bit pattern 直接複製,不懂「數值大小」,只認位元寬度。
32 位 = 1 符號位 + 8 位指數 (exp) + 23 位尾數
(-1)^sign × 2^(exp-127) × 1.尾數int i = 5;
float f = i; // 語意轉換:產生 float 5.0,bit pattern 完全不同
int i = 37;
float f = *(float*)&i; // 強制重新解釋位元:bit pattern 不變,得到極小非正規化浮點數
float f = 7.0f;
short s = *(short*)&f; // 截取低 16 位解釋為 short,bit pattern 不變
總結:= 賦值會做語意轉換(bit pattern 改變);指標轉型 *(T*)&x 僅改變解釋方式(bit pattern 不變)。