C言語「メモリ内の整数の保存、ビッグエンディアンとスモールエンディアンのストレージモードの紹介」

目次

1. データ型の概要

2. 整数がメモリに格納される仕組み (元のコード、逆コード、補数コード)

3. ビッグエンディアンとスモールエンディアンのストレージモードの導入と判定


1. データ型の概要

1. C言語のデータ型とバイトサイズ

2. 基本的な種類の分類

        (1) 整数族:

                        

        (2) 浮動小数点ファミリー:

                        

        (3) 工事の種類:

                        

        (4) ポインタ型:

                        

        (5) void 空型: 通常、関数の戻り値の型、関数のパラメーター、およびポインターの型に使用されます。


 2. 整数がメモリにどのように格納されるか

整数型にはメモリ内で4 バイトが割り当てられていることがわかります。

2 つの整数変数 a、b を作成します。

                                

 デバッグを使用してメモリの保存方法を確認できます

a の値は 10 です。メモリに保存される形式は、上の図に示すとおりです: 0a 00 00 00。観察しやすいように、vs は 16 進数を表示します。A は 10。良いフィードバックが得られます。最小数のバイト オーダー ビットを下位アドレスに配置するのが、実際にはリトル エンディアン バイト ソート方法です

負の数がメモリにどのように格納されるかを説明する前に、まず元のコード、逆コード、および補数コードを紹介します。

        元のコード、逆コード、補コード:

        正の数の元のコード、逆コード、補数コードは同じです。(整数バイナリ)

        元のコード、補数コード、および負の数の補数コードの関係:

                元のコード: 10 進数またはその他の 10 進数を 2 進数に変換します

                ネガティブ コード:符号ビット (最初のビット) を除く元のコードは変更されず、他のすべてのビットは反転されます

                2 の補数: 1 の補数に 1 を加えたもの

(補足:2の補数コードを元のコードに変換するには、まず1を引いてビットごとに反転するか、最初にビットごとに反転して1を加えることができます。これは元のコードを2の補数コードに変換するのと同じです。

すべての整数は 2 の補数形式

 

メモリ内の -10 の格納形式は f6 ff ff ff です。

コンピューターを使って-10 を16 進数で計算できます

 ご覧のとおり、これは上記のメモリに保存されている 16 進数値と同じです。

a+b の値を計算したい場合、b は負の数であり、負の数の符号ビットは 1 であるため、a と b の元のコードを使用して直接計算することはできません。実際には、コンピューターの CPU加算演算のみがあり、減算はありません。負の数値演算を実行したい場合は、それを補数に変換し、次に 2 つの補数を元のコードに変換して計算する必要があります

まずは元コード、逆コード、 -10の補コードを書き出してみましょう

元のコード: 11111111111111111111111111111111111111111111111111111111110110

逆コード: 100000000000000000000000000000000000000000000000001001

1010

a+b の補数計算プロセス:

        a:00000000000000000000000000000000000000000000000001010

        b:10000000000000000000000000000000000000000000000001010

   a+b:10000000000000000000000000000000000000000000000000000

次に、バイナリ レベルの下位ビットの方向に 32 ビットを取り出し、1 (32 個の 0) を取り除き、a+b の結果は 0 になります。


3. ビッグエンディアンとスモールエンディアンのストレージモードの導入と判定

        (1 はじめに

        リトルエンディアン ストレージ モード:データ内の最小のバイト順序を持つ数値が下位アドレスに格納され、最大のバイト順序を持つ数値が上位アドレスに格納されることを意味します。

        ビッグエンディアン ストレージ モード:データ内のバイト順序が大きい数値は下位アドレスに格納され、バイト順序が小さい数値は下位アドレスに格納されることを意味します。

        (2) VS のメモリの保存モードがビッグエンディアンかスモールセグメントかを判断し、それを判断するコードを記述します。

        アドレスは下位から上位にあり、a = 500 とすると、メモリの格納方法は次のようになります。

        

500 に相当する 16 進数は 1f4 です。

ここでのデータの下位バイトビットは下位アドレスに配置されます。

したがって、VS のメモリ格納方式はリトルエンディアン ストレージです。

(3) エンディアンを決定するコードを設計します。

原則: 整数変数 i = 1 とします。それをメモリに格納するには、ビッグ エンディアンまたはスモール セグメントという 2 つの方法があります。

先頭はリトルエンディアン

以下はビッグエンディアンです

4 バイトにアクセスできるので、 char 型にキャストして1 バイトにアクセスさせ逆参照する必要があります。1 ならリトル エンディアン0 ならビッグ エンディアンです

 

おすすめ

転載: blog.csdn.net/cool_tao6/article/details/130935147