C/C++ データ型の 0 からメモリへの具体的な割り当ての詳細な説明

目次

1. データ型の分類

2. タイプメモリサイズ

3 番目に、メモリ内の具体的な格納方法 (整数ファミリーと浮動小数点ファミリーについて説明します。カスタム型については次回の記事を楽しみにしていてください)

1. 整数族は int を例にとります。最初にマシンのビッグエンディアンとスモールエンディアンを判断する必要があります (ある企業の筆記試験の問題、問題を解決する方法はたくさんありますが、ここでは概念についてのみ説明します)

 2. 浮動小数点ファミリーでは、float を例に挙げます。

4: 質問で剣をテストする


1. データ型の分類

1. 整数ファミリー: char、short、int、long、long long、unsigned int、unsigned char、unsinged short、unsigned long、unsinged long long。(charが整数ファミリーに分類される理由は、マシン内で文字がAscllコード値で格納されるためです)

2. 浮動小数点ファミリー: float、double。

3. カスタム タイプ: struct、enum、union。

4.ボイドタイプ。

2. タイプメモリサイズ

char/unsigned char(1バイト)

short/unsigned short (2バイト)

int/unsigned int (4バイト)

long int/unsigned long int (マシンに応じて 4 バイト以上)

Long Long/unsigned Long Long (8 バイト以上)

浮動小数点(4バイト)

二重 (8 バイト)

3 番目に、メモリ内の具体的な格納方法 (整数ファミリーと浮動小数点ファミリーについて説明します。カスタム型については次回の記事を楽しみにしていてください)

1. 整数族は int を例にとります。最初にマシンのビッグエンディアンとスモールエンディアンを判断する必要があります (ある企業の筆記試験の問題、問題を解決する方法はたくさんありますが、ここでは概念についてのみ説明します)

マシンのエンディアンネスの補足: int a = 1 を定義するとします。そのメモリ サイズは 4 バイトで、メモリにはバイト単位のアドレス番号があり、a の 2 の補数は次のようになります (元の補数は次のとおりです。前の記事を参照してください https : //mp.csdn.net/mp_blog/creation/editor/130656985 ), 00000000000000000000000000000001 ですが、アドレスは上位アドレスと下位アドレスに分かれています。補数の 1 が下位アドレスにある場合、マシンはリトル エンディアンであり、その逆です。ビッグエンディアンです。

 int メモリ空間の使用から始めましょう。1 バイトは 8 ビットなので、int は 32 ビットになります。その割り当てを理解するために図を見てみましょう (例としてリトルエンディアン マシンを取り上げます)

他のシェーピング ファミリのストレージは同様ですが、メモリ サイズのみが異なります。

 2. 浮動小数点ファミリーでは、float を例に挙げます。

まず最初に、浮動小数点型と整数型のメモリへの格納がまったく異なることを明確にする必要があり、次に浮動小数点型を例にして説明します。まず第一に、あらゆる種類の理論的知識は、15 = 1.5*10^1 などの科学的表記法に変換できます。浮動小数点ファミリーも科学的表記法と同様の方法で保存されます。符号ビット。その符号ビットは整数と同じです。異なります。デフォルトは (-1)^s です。s が 0 の場合は正の数、1 の場合は負の数です (単なるとりあえず覚えておいてください、後で写真があります)。次に 1.5 の部分を格納しますが、それを 2 進数に変換、つまり 0 と 1 のみに変換します。 1を加算すると、インデックス部分が保存されます。これも最初はバイナリに変換されますが、保存するときは127を加算してからバイナリに変換されます。興味があれば、関連する情報を自分で見つけることができます。ここではあまり説明しませんが、インデックス部分を取り出した場合 考えられるのは 3 つです: 1) 最初のバイナリを格納した後、格納中に 127 が追加されるため、すべて 0 が追加されます このとき 0 が表示されます。非常に小さな数値です。すべての数値を取り出すと、システムは前の数値を省略します。1 は直接 0.00000... * 2^ -127 の形式になります。 2) 指数部はすべて 1 です。非常に多くの数があり、自分で調べることができます。3) オール0でもオール1でもなく、足した127を引いたもので、それ以外は変化しません。詳細は以下の通り

4: 質問で剣をテストする

 質問の回答結果を表示します。

9

0.000000

1091765616

9.000000

理由は、浮動小数点数と整数の格納方法が異なり、取り出し方法も異なるためです。分からない場合は、先ほど説明した方法に従ってバイナリ変換、格納、取り出しを行ってください。思考の惰性を避けるために、この質問については再度説明しません。

おすすめ

転載: blog.csdn.net/m0_74316391/article/details/130980796