重複の可能性:
エンディアンが要因になるのはいつですか?
エンディアンに関するこのツトを読んで、私はエンディアンが重要であるこの例に当てはまります。これは、1と0で満たされたchar *を書くことです。その後、shortに変換でき、結果は、エンディアンに応じて、少しまたは大きくなります。これが引用された例です。
unsigned char endian [2] = {1、0}; 短いx;
x = *(short *) endian;
xの値は何でしょうか?このコードが何をしているのか見てみましょう。2バイトの配列を作成してから、その2バイトの配列を1つのshortにキャストします。配列を使用することにより、基本的に特定のバイト順序を強制し、システムがそれらの2バイトをどのように処理するかを確認します。これがリトルエンディアンシステムの場合、0と1は逆方向に解釈され、0,1であるかのように見えます。上位バイトは0であり、下位バイトは1であるため、xは1に等しくなります。一方、ビッグエンディアンシステムの場合、上位バイトは1であり、xの値は256。
私は疑問に思います:与えられた数のメモリバイト割り当て(ここでは2バイト)で配列をインスタンス化するとき、配列にその数が割り当てられている限り、どのように任意のタイプ(short、int ...)に変換できますか?このバイトに対応するバイトの?'このタイプを含む'に十分なメモリが割り当てられていない場合でも、次のメモリアドレスが読み取られますか?たとえば、エンディアンをロングにキャストしたい場合、これはエンディアンの先頭から4バイトを読み取って実行されますか、それとも失敗しますか?
次に、エンディアンに関する質問:これは、メモリ内にバイトを書き込む習慣に関するプロセッサの特性であり、最も重要なバイトが最小のメモリ位置(ビッグエンディアン)または最大のメモリ位置(リトルエンディアン)にあります。この場合、2つの1バイト要素を持つ配列が割り当てられています。1が最も重要なバイトと言われるのはなぜですか?