ビッグエンディアンとリトルエンディアンの違いを覚える実用的なトリックはありますか?


13

ビッグエンディアンとリトルエンディアンの問題で毎日仕事をしているわけではないので、どの問題が何であるかを覚えるのは非常に困難です。

最近、私は2つの違いを尋ねるインタビューを受けました。私は「推測」することに決めたのを覚えていなかったので(結局50%の確率)、失敗しました。

それで、ビッグエンディアンとリトルエンディアンの違いを思い出すための広く知られた実用的なトリックはありますか?


10
私薄い狂はエンディアンが何であるかを述べると、あなたは常にそれをグーグルようで、それラウンドどの方法を覚えてことはできませんと言ったほうが良いです
JKを。

私もそれを思い出すのに問題があり、紛らわしい覚えやすいトリックが多すぎます。私の唯一の信頼できる助けは、Googleでエンディアンの呪文を唱えることです。そうすれば、ウィキペディアの記事を入手できます
ムーヴィシエル

3
面白い偶然-私は今日このリンクにつまずいただけで、驚くほど関連性が高いcommandcenter.blogspot.com/2012/04/byte-order-fallacy.html
Nevermind

@Nevermind 2番目の段落の後、その記事を読むのをやめました。「コンパイラライターと、レジスタにマップされたメモリを処理する必要のある人々のみが関心を持っています」それがひどい庭の道の文であるという事実に加えて、それはレジスタを扱うコードがエッジケースであることを暗示しています。デバイスドライバーを使用せずにコンピューターを使用してみてください。
dodgethesteamroller

回答:


14

私は常に間違った方法を定義していると考えてきましたが、それを覚えておくのもヒントです。英語を母国語としない人として、「開始」の反対として「終了」を見ます(明らかに「終了」は開始-終了または終了-のどちらかを意味します)。とにかく、「間違った方法で定義されている」ことを覚えているだけです:)

  • ビッグエンディアンでは、最も重要な(最大の)バイトが先頭にあります。
  • 少しではエンディアン、最下位(ささい)バイトがであるスタート

または、ビットエンディアンを参照する:

  • 128 64 32 16 8 4 2 1はビッグエンディアンです。
  • 1 2 4 8 16 32 64 128はビッグエンディアンであるため、リトルエンディアンです。

単語のエンディアンネスの通常の使用は、単語内のバイトの順序を指しますが、その一般的な意味は、より大きなデータ項目の表現内の個別にアドレス可能なサブコンポーネントの順序を指しますWikipediaで説明されています)。


5
ああ、しかし、リトルエンディアンlilliputiansは、それが正しい方法ラウンドですので、少し最後に卵を(ひび割れ)を開始
JK。

4
-1:エンディアンネスとは、バイト内のビットではなく、ワード内のバイトを指します。
kdgregory

1
@kdgregory-最後に、ビット番号は単語内で影響を受けます。さまざまなエンディアンでビットフィールド構造体を試しましたか?ただし、答えが間違っていることに同意します。
mouviciel

@Kdgregory:Wikipediaよるとエンディアンとは、より大きなデータ項目の表現内の個別にアドレス可能なサブコンポーネントの順序を指します。それが一般的なケースです。ビットエンディアンの概念もあります。エンディアンネスの最も一般的な使用法は、単語内でのバイトの順序付け方法を指すというであなたは正しいです。私の例は、明らかにそれを反映していませんでした。最初の例を一般的なケースに置き換えました。
ジョナスプラッカ

2
@kdgregory:CSの理論的概念を正当化するためにハードウェアの存在が必要になるのはいつですか?しかし非常によく:8051にはビットアドレス指定可能なレジスタがあります。Ada言語では、データ型表現(pdf)に適切なビット順序を指定できます。もちろん、シリアル媒体でのビットの送信順序は、ビットのエンディアンを定義する必要があります。「エンディアン」の通常の使用が特別なケース(単語単位のバイト)を指すという事実は、その一般的な意味を無効にしません。
ジョナスプラッカ

33

私自身のヒント:

  • ビッグエンディアン =ビッグエンドが最初です!(最初のバイト(最下位アドレス)はMSBです)
  • リトルエンディアン = リトルエンドファースト!(最初のバイト(最下位アドレス)はLSBです)

3
はい、これは私が考える方法です:ビッグエンディアンは「ビッグエンドで開始」、リトルエンディアンは「リトルエンドで開始」。それは野球のバットのようなもので、バットの両端があり、1つは大きく、もう1つは小さいです。そんなに難しい概念ではありません。
シェーンキルケリー

6

これを覚える最良の方法は、文明化された人々が多様性を追求し、したがって彼らが彼らの数を注文するのとは異なる方法で彼らの卵を食べるということです。最初に大きな数字で始まる10進数(ビッグエンディアン)を書くのに対して、小さな端(ソフトエンディアン)からゆで卵を食べます。


1
この答えはほとんど技術的ではありませんが、完全に正確であり、私を笑わせました。よくやった。

6

ビッグエンディアン番号は「ビッグエンド」から始まります。リトルエンディアン番号は「リトルエンド」から始まります。

どちらも、ガリバー旅行記によると、どこで卵を食べ始めるかという問題を暗示しています。

この場合、「終了」は開始の反対ではなく、単に(ロープ|文字列|番号|配列)の極端を意味するため、「ビッグフィニッシュ」または「リトルフィニッシュ」とは呼ばれません(間違いなく「開始」の反対)。


確かに。そして、最も簡単な(そして最も楽しい)覚え方は、ガリバー旅行記を読むことです。どっちがどっちなのか忘れないことを保証します!
ジュール

「食べ始める」を太字(72pt、<blink>)で入力する必要があります。これが、ここでのすべての混乱の理由です。
Tニーラス

2

私にとって覚えやすい最も簡単な方法は、「エンディアン」という言葉を「スターティアン」に変更することです。ビッグスターティアン整数はビッグエンドで始まり(たとえば、最上位バイトが最初に来る)、リトルスターティアン整数はリトルエンドで始まります(たとえば、最下位バイトが最初に来る)。


startian発音してお気軽/'stɑːr.ʃən/または/'stɑːr.ti.ən/(オミット非rhoticアクセントのために/ R /)
dreamlax

これはかなり賢く、覚えやすいです。
Coldblackice

1

「ビッグエンディアン」と「リトルエンディアン」のどちらを思い出すことはできませんでしたが、PowerPCとIntel x86プロセッサのエンディアンを知っていました。ほとんどの文字はIntelとほとんど共通していないため、Intel x86はリトルエンディアンです。

もちろん、PPCとx86のバイトオーダーを知っている場合にのみ役立ちます。一方、Intel x86 =リトルエンディアンであることを覚えておく必要があります。また、x86とARMはまったく異なる命令セットでも非常に互換性が高いことを忘れないでください。


1

私はこのように言います:ビッグは美しいです!

大きい==美しい==正しい。
正しいエンディアンとは、hexdumpで読むことができるものです。これは、健全な人間が行うように、最上位バイトを最初に置くものです。

少し==い==間違っています。
このエンディアンによって生成される16進ダンプは、「脳!」と叫んで逃げるほど単純な間違いです。多分これはある種のエイリアンの憎悪であり、この残虐行為の起源を推測することしかできません。それにもかかわらず、それは存在し、私たちはそれで立ち往生しています。

ピッティ、それは常にレースを作る最高のバリアントではありません...


Little == ugly == wrong... 「最小の人でも未来の進路を変えることができる」
ガラドリアル

-1

ビッグエンディアン:(昇順)

低から高

0 | 1 | 2 | 3 ^ ^開始終了

リトルエンディアン:(降順)

高から低

すなわち

3 | 2 | 1 | 0 ^ ^開始終了


1
質問は、どれを覚えているのか実用的なトリックを求めました。
gnasher729
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.