IIJでは広報誌「IIJ.news」を隔月で発行しています。本blogエントリは、IIJ.news連載コラム「インターネット・トリビア」を転載したものです。IIJ.newsはご希望者へ郵送でお送りしています。また、IIJ WebではPDF版をご覧頂けます

IIJ.news vol.146 もくじ

iijnews146

  • ぷろろーぐ「ごーいんぐ・こんさーん」 鈴木 幸一
  • [特別対談] 人となり
    公益財団法人 日本サッカー協会 会長 田嶋幸三 氏
    IIJ 代表取締役社長 勝 栄二郎
  • Topics 「産業 × IT」
    • 情報サービスのオープンプラットフォームであるインターネットが引き起こした変革
    • ICT・ロボットなどを活用したスマート農業
    • エネルギー産業におけるICT活用
    • インターネットを使った新しいサービス~シェアリングエコノミーと仮想通貨
    • ITとカイゼン
  • Technical Now: クラウド運用の自動化を推進する IIJ 統合運用管理サービス
  • インターネット・トリビア: コンピュータでの数字の並べ方 ※この記事で掲載
  • グローバル・トレンド: チャレンジの足がかり
  • ライフ・ウィズセーフ: ここから先は徐行です

それぞれの記事はIIJ.news PDF版でお読み頂けます。

インターネット・トリビア: コンピュータでの数字の並べ方

コンピュータが扱うデータは全て数値データである、ということは皆さんもよくご存じかと思います。コンピュータが扱う最小単位はビット(bit)と呼ばれ、電気が流れている/流れていないという状態を、数字の0/1に見立てています。このビットを複数並べると、二進数という記法で数値を表すことができます。

二進数をそのまま扱うのは不便なので、二進数で八桁分(8ビット)をまとめて扱うことがほとんどです。これを1バイト(byte)と呼びます。1バイトで表せる範囲を普段使っている十進数に直すと、0から255に相当します。また、プログラムやデータの表示の際には、1バイトを二桁の十六進数で表すことも一般的です。一つ例を挙げると、十進数の74は、二進数で01001010、十六進数では「4A」と表されます(十六進数は一桁を表すのに0〜9とA〜Fの一六種類の数字を使用します)。

コンピュータで扱うデータのなかには255を超えるような数値は普通に登場します。こうした大きな数を表すときは、連続した複数のバイトで一つの数値を表します。例えば、十進数で1,234,567,890 は、二進数では01001001100101100000001011010010、これをバイト毎に分割してそれぞれ十六進数で表したのが「49,96,02,D2」というデータです。

では、コンピュータのなかでこの数字はどのように記録されているのでしょうか?

前から順番に記録するのが自然だと思われるかもしれませんが、コンピュータには前から順に「49,96,02,D2」と記憶する流儀と、反対に「D2,02,96,49」と記憶する流儀の二通りがあります。前者の流儀を「ビッグ・エンディアン(Big Endian)」、後者を「リトル・エンディアン(Little Endian)」と呼びます。

このように流儀が分かれているのは、それぞれに異なるメリットがあるからです。ビッグ・エンディアンは人間が普段、紙に書いたりする並べ方と同じなので、見てわかりやすく、リトル・エンディアンは複数のバイトのかたまりから数値に変換するときの処理がやりやすいのです。

リトル・エンディアンのメリットを、十進数を使って説明してみましょう。1234 という数をリトル・エンディアンの考え方にもとづいて桁毎に数字に分解すると「4,3,2,1」となります。この数字の並びをもとの数値に戻すときは「4+3×10+2×100+1×1000=1234」という計算を行ないます。順番にかけ算の桁を大きくしながら数を足していけば、もとの数値が得られるため、計算処理が素直になるのです。このような数字の並べ方のことを、バイトオーダー(Byte Order)と呼びます。皆さんのパソコンではリトル・エンディアンが使われていますが、銀行などで使われている大型コンピュータでは、ビッグ・エンディアンが使われていることが多いようです。また、なかにはバイトオーダーを切り替えることができるコンピュータまで存在します。

コンピュータによってバイトオーダーが異なると、違う種類のコンピュータをつないで利用する場合に混乱が生じます。そこで、インターネットの通信手順(Internet Protocol)では、コンピュータの種類にかかわらず、ビッグ・エンディアンを使うことが決められています。これをネットワークバイトオーダーと言います。

ところで、このビッグ・エンディアン/リトル・エンディアンという言葉の語源は『ガリヴァー旅行記』なのだそうです。「こびとの国」のなかに、卵を丸い側(大きい側)から割る人たち(ビッグ・エンディアン)と、尖った側(小さい側)から割る人たち(リトル・エンディアン)の争いというエピソードがあり、それがコンピュータにも転用されたとのことです。