基本データ型とメモリサイズ
| 型 | 説明 |
|---|---|
| char | 文字型 |
| short | 短整数型 |
| int | 整数型 |
| long | 長整数型 |
| float | 単精度浮動小数点数 |
| double | 倍精度浮動小数点数 |
整数型の分類
符号付きchar 符号なしchar short 符号付きshort 符号なしshort int 符号付きint 符号なしint
浮動小数点型の分類
float double
整数のメモリ表現
符号表現
整数はメモリ内で補数形式で保存されます。
int val = -10; // 原碼: 10000000 00000000 00000000 00001010 // 反碼: 11111111 11111111 11111111 11110101 // 補碼: 11111111 11111111 11111111 11110110
エンディアン
リトルエンディアンとビッグエンディアンの違い:
int num = 0x11223344; // リトルエンディアン: 44 33 22 11 // ビッグエンディアン: 11 22 33 44
エンディアン判定
int check_endian() {
int test = 1;
return *(char*)&test;
}
浮動小数点のメモリ表現
IEEE 754規格に従って保存されます。
float f = 5.5f; // 二進表現: 01000001 10110000 00000000 00000000
浮動小数点の構成
- 符号部(S): 1ビット
- 指数部(E): 8ビット (float), 11ビット (double)
- 仮数部(M): 23ビット (float), 52ビット (double)
浮動小数点の例
float value = 9.0f; // 二進表現: 01000010 00010000 00000000 00000000
型変換の注意点
unsigned int u = 10;
int i = -20;
printf("%d\n", u + i); // 予期せぬ結果になる可能性
特殊なケース
unsigned int counter;
for(counter = 10; counter >= 0; counter--) {
// 無限ループの危険性
}