この C コードをデバッグすると:
unsigned int i = 0xFF;
デバッガーは、リトルエンディアン システムの場合はメモリ 0x00FF を表示し、ビッグ エンディアン システムの場合は 0xFF00 を表示しますか?
この C コードをデバッグすると:
unsigned int i = 0xFF;
デバッガーは、リトルエンディアン システムの場合はメモリ 0x00FF を表示し、ビッグ エンディアン システムの場合は 0xFF00 を表示しますか?
もしも:
char
の s があります。unsigned int
sを使用しています&i
リトルエンディアンの場合は、次のようになります。
ff 00 ?? ?? ?? ?? ?? ??
ビッグエンディアンの場合は次のようになります。
00 ff ?? ?? ?? ?? ?? ??
疑問符はi
、メモリ内の後続のバイトを表すだけです。
ご了承ください:
unsigned int
。実装次第です。CHAR_BIT * sizeof (unsigned int)
。マシンが 32 ビットを使用している場合unsigned char
は、次のように表示されます。
ff 00 00 00 ?? ?? ?? ??
リトル エンディアンの場合、ビッグ エンディアンのマシンでは次のように表示されます。
00 00 00 ff ?? ?? ?? ??
アドレスの周りのメモリの生の内容を表示すると&i
、はい、違いがわかります。しかし00 00 00 ff
、ビッグエンディアンとリトルエンディアンの場合は、 4 で(1 バイトあたりのビット数) が 8 であるとff 00 00 00
仮定します。質問では、それらを交換しています。sizeof(unsigned int)
CHAR_BIT
エンディアンをプログラムで検出することもできます (つまり、実行するアーキテクチャのエンディアンを出力するプログラムを作成できます)。たとえば、C++ プログラムでプログラムによってエンディアンを検出するを参照してください(解決策は C にも適用されます)。