コンピュータ内部でマルチバイトデータをどのように表現(格納)するかという方式に、ビッグエンディアンとリトルエンディアンと呼ばれる異なる方式があります。詳しくはWikipediaなどを参照していただくとして、簡単に説明すると以下のような違いです。
例として、32ビット(4バイト)長の符号無し整数を表現する方式で説明します。長方形の箱はバイトを表しています。

この図をみるとどちらが「直感的に」分かりやすいでしょうか。自分はビッグエンディアンのほうが分かりやすいと感じました。仕事で最初に使った計算機がビッグエンディアンだったという理由もありますが、こうやって図にした時に、リトルエンディアンだとややこしいのに対して、ビッグエンディアンでは、いつも見慣れた表現でそのまま見ることができます。
では、こちらの図ではどうでしょうか。ビッグエンディアンのほうは変更なく、リトルエンディアンのほうだけ図を変更しています。

メモリのアドレスを「逆順に」書いただけなんですが、こうすると、リトルエンディアン「でも」分かりやすいと思いませんか。
コンピュータ内部で取り扱う情報は、4バイトデータだけではありません。1バイトデータも2バイトデータも8バイトデータもあります。
リトルエンディアンでは1バイトで納まらなくなったら、溢れた上位桁の分を次のバイトに格納すれば良いわけです。一方、ビッグエンディアンでは1バイトで納まらなくなった時は、そのデータを次のバイト位置に移動したうえで、溢れた上位桁の分をもとのバイト位置に格納します。
1バイトデータから2バイトデータに拡張する時は、むしろリトルエンディアン「のほうが」自然な方式だと感じませんか。
こういう感じ方の違いが出てくる原因はなんでしょうか。それは、数学(のというか数値表現)に関する長い歴史のなかで培われてきたちょっとした不整合が原因だと思います。
数直線という言葉をご存じですね。普通は水平に線を引いて、左側が小さい数値で、右側が大きい数値を表現します。グラフの水平軸(X軸)も普通はこの方向です。
自分の想像ですが、おそらくこの書き方が定着したのは、右利きの人のほうが多いからだと思います。右利きの人が水平線を描くときは、左から右へ引くように描くのが楽です。また、数を順番に数えるには、一般的には小さいほうから大きいほうへ数えます。小さい方から大きいほうへ、と、左から右へがこうしてつながっています。
さきほどの図の1枚目と、2枚目でもビッグエンディアンのほうは、メモリアドレスは右のほうが大きい(高位アドレス)として表現しています。ところが、2枚目のリトルエンディアンのほうでは逆に左のほうが大きく(高位アドレス)なっています。だからなんとなく気持ちが悪く感じます(自分の場合は)。
一方、数値の位取り表現(普通のアラビア数字の書き方といえばいいでしょう)では、桁があがると左側に追加していきます。
この書き方が定着したのも右利きが関係していると想像しています。数値を言葉で表現する時、多くの言語では位(桁)の大きいほうから表現します。日本語では1234は1千2百3十4です。英語ではone thousand, two handreds and thirty fourです。ほかの言語は知りません(^^; この言語表現と、位取りを左(上位桁)から右(下位桁)に書いていくのにも右利きに取って馴染みやすいというのが理由じゃないかと。
つまり、左よりも右のほうが大きいという数直線と、左のほうが大きいという位取り表現のミスマッチが、「リトルエンディアンは(ビッグエンディアンよりも)分かりにくい」という、自分のような人間を産んでいるんだと考えています。
計算機内部(CPUチップ内部)の電子回路でみれば、同じバイト内で上位ビットが左側にあるということもなければ、メモリ上の上位アドレスのバイトが右側にあるということもありません。右とか左とかという概念は論理回路上にはありませんから。「回路図」上にはあるでしょうけど。
となると、論理的にはリトルエンディアンのほうが素直なのかもしれませんね。
最近のコメント