C言語におけるデータのメモリ内表現

基本データ型とメモリサイズ

説明
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--) {
    // 無限ループの危険性
}

タグ: C言語 メモリ管理 データ表現 浮動小数点数 整数型

5月15日 20:23 投稿