0

この C コードをデバッグすると:

unsigned int i = 0xFF;

デバッガーは、リトルエンディアン システムの場合はメモリ 0x00FF を表示し、ビッグ エンディアン システムの場合は 0xFF00 を表示しますか?

4

2 に答える 2

2

もしも:

  • お使いのシステムには 8 ビットcharの s があります。
  • お使いのシステムは 16 ビットunsigned intsを使用しています
  • そして、デバッガーはメモリを単に16進数のバイトとして表示します

&iリトルエンディアンの場合は、次のようになります。

ff 00 ?? ?? ?? ?? ?? ??

ビッグエンディアンの場合は次のようになります。

00 ff ?? ?? ?? ?? ?? ??

疑問符はi、メモリ内の後続のバイトを表すだけです。

ご了承ください:

  • リトルエンディアン マシンは、最小値のバイトを最小アドレスに格納します。
  • ビッグ エンディアン マシンは、最大値のバイトを最小アドレスに格納します。
  • C は、 に含まれるビット数を指定しませんunsigned int。実装次第です。
  • を使って調べることができますCHAR_BIT * sizeof (unsigned int)

マシンが 32 ビットを使用している場合unsigned charは、次のように表示されます。

ff 00 00 00 ?? ?? ?? ??

リトル エンディアンの場合、ビッグ エンディアンのマシンでは次のように表示されます。

00 00 00 ff ?? ?? ?? ??
于 2012-05-04T09:52:47.167 に答える
2

アドレスの周りのメモリの生の内容を表示すると&i、はい、違いがわかります。しかし00 00 00 ff、ビッグエンディアンとリトルエンディアンの場合は、 4 で(1 バイトあたりのビット数) が 8 であるとff 00 00 00仮定します。質問では、それらを交換しています。sizeof(unsigned int)CHAR_BIT

エンディアンをプログラムで検出することもできます (つまり、実行するアーキテクチャのエンディアンを出力するプログラムを作成できます)。たとえば、C++ プログラムでプログラムによってエンディアンを検出するを参照してください(解決策は C にも適用されます)。

于 2012-05-04T09:50:14.510 に答える