1. ホーム
  2. c

[解決済み] リトルエンディアンとビッグエンディアンを比較するC言語プログラム [重複] [重複

2023-07-28 16:10:44

質問

重複の可能性があります。

ビッグエンディアンまたはリトルエンディアンマシンを決定するための C マクロ定義?

int main()
{
  int x = 1;

  char *y = (char*)&x;

  printf("%c\n",*y+48);
}

リトルエンディアンの場合は1が表示され、ビッグエンディアンの場合は0が表示されます。 ビッグエンディアンの場合は0と表示されますが、これは正しいのでしょうか? それとも、char*をint xに設定すると、エンディアンに関係なく、常に最下位ビットを指すのでしょうか?

どのように解決するのですか?

簡単に言うと、「はい」です。

32 ビット マシンを使っているとします。

リトルエンディアンであれば x のようなものがメモリ上に表示されます。

       higher memory
          ----->
    +----+----+----+----+
    |0x01|0x00|0x00|0x00|
    +----+----+----+----+
    A
    |
   &x

だから (char*)(&x) == 1 であり、かつ *y+48 == '1' . (48は'0'のアスキーコード)

ビッグエンディアンの場合、そうなります。

    +----+----+----+----+
    |0x00|0x00|0x00|0x01|
    +----+----+----+----+
    A
    |
   &x

ということで、こちらは '0' .