エンディアン(endianness)

分類
テクノロジ系 コンピュータ構成要素
出る試験
基本情報応用情報
重要度
★★☆☆☆

複数バイトのデータを主記憶に置くときの並べ方。上位バイトから置くか、下位バイトから置くか。

もう少し詳しい説明

エンディアンは、複数バイトのデータを主記憶に置くときの並べ方のことです。バイトオーダ(バイト順序)とも呼びます。

先に言葉を3つ説明します

バイトは、ビット(0か1のどちらかを入れる1けた)を8個まとめた単位です。半角の英数字1文字が、ちょうど1バイトにあたります。

主記憶は、いま実行中のプログラムとデータを置いておく記憶装置です。単に「メモリ」とも呼ばれます。

番地は、主記憶の中の置き場所につけられた通し番号です。マンションの部屋番号にあたります。「100番地」と言えば、主記憶の中の決まった1か所を指します。

バイトとビットについては、ビットとバイト(0か1を入れる1けたと、それを8個まとめた単位)のページでくわしく説明しています。

なぜ順番を決める必要があるのか

主記憶(プログラムとデータを置いておく記憶装置)は、1つの番地に1バイトずつしか置けません。

ところが、1バイトで表せるのは256通り(0〜255)だけです。これでは足りないので、整数は何バイトかをまとめて1つの値として扱います。

何バイト使うかは、データの種類ごとに決まっています。 整数なら2バイト・4バイト・8バイトのいずれかが使われ、いまよく見かけるのは4バイトです。4バイトは32ビットなので、約43億通りの値を表せます。

つまり1つのデータを1バイトずつに切り分けて、続きの番地にまたがって置くことになります。すると「どの部分を先に置くか」を決めておかないと、読み返すときに元の値に戻せません。その取り決めがエンディアンです。

ビッグとリトル

16進数(0〜9とA〜Fの16種類で数を書く書き方)で 12345678 という4バイトのデータを置いてみます。

0123番地ビッグ12345678リトル78563412
16進数で 12345678 という4バイトのデータを、主記憶の0番地から置いた図です。色を付けた左端を見てください。ビッグエンディアンは上位バイトの12から、リトルエンディアンは下位バイトの78から置きます。データそのものは同じで、置く順番だけが違います。

「ビッグ」「リトル」は、先に置くバイトの大きさを指しています。上位バイトは値としての重みが大きいので「ビッグ」、下位バイトは重みが小さいので「リトル」です。

ビッグエンディアンは、メモリ(主記憶)の中身をそのまま並べて読むと、人が書いた16進数と同じ順に読めます。デバッグ(プログラムの誤りを見つけて直す作業)のときに読みやすいのが利点です。

リトルエンディアンは逆順なので人には読みにくいのですが、下位バイトが先に来るので、繰り上がりのある計算を下の桁から始められます。また、4バイトのデータを「下位2バイトだけ」として読み直すときに、先頭番地を変えずに済みます。

どちらが正しいということはない

どちらが優れているという話ではありません。 プロセッサ(計算と命令の実行を受け持つ部品。CPUと同じものを指します)の設計者が決めたことで、両方が今も使われています。

TCP/IP(インターネットで使われている通信の決まりごと一式)の通信では、ビッグエンディアンに統一されています。 これをネットワークバイトオーダと呼びます。

送る側と受ける側のプロセッサ(計算と命令の実行を受け持つ部品)が違う可能性があるので、通信の上では順番を1つに決めておかないと話が通じません。送った側が下位から並べ、受けた側が上位からだと思って読めば、まったく別の値になります。

そのため、リトルエンディアンのパソコンがネットワークに送るときは、並べ替えてから送っています。両方に対応できる(切り替えられる)プロセッサもあります。

名前の由来

ガリバー旅行記から取られています。ゆで卵を太いほう(big end)から割る派と細いほう(little end)から割る派が争う話が出てきます。

どちらでも卵は食べられるのに、どちらが正しいかで延々と争っている——バイトの並べ方をめぐる議論を、そう見立てた命名です。この由来を知っていると「どちらが正しいわけでもない」という点が記憶に残ります。

試験での出され方

問題文はたいてい16進数で与えられます。「16進数で 12345678 と表されるデータを…」という形です。

16進数の2桁が1バイトなので、まず2桁ずつに区切ってください。

(16進数の1桁は16通りを表せます。16通りは2進数の4桁ぶんなので、16進数2桁 = 2進数8桁 = 8ビット = 1バイト、となります。)

12345678 → 12 / 34 / 56 / 78

ここを1桁ずつに切ってしまうと答えが合いません。区切ってから、ビッグなら左から、リトルなら右から並べます。

試験ではこう出る

科目A(旧・午前)では、データを与えて各番地の値を答えさせる問題として出ます。16進数のデータと先頭番地が与えられ、「○番地に入る値はどれか」という形です。

解く手順は決まっています。①16進数を2桁ずつに区切る → ②ビッグなら左から、リトルなら右から番地に並べる。それだけです。

選択肢には、ビッグとリトルを逆にした値が必ず入っています。 リトルは下位から、と1つだけ覚えておけば区別できます。

ネットワークバイトオーダがビッグエンディアンであることも、ネットワーク分野と組み合わせて問われることがあります。

関連する用語

主記憶
データを置く場所。1番地に1バイトずつ置くので、順番を決める必要がある
基数変換
2進数・16進数の読み替え。エンディアンの問題は16進数で出される
プロセッサ
どちらの並べ方にするかはプロセッサの設計で決まっている

ミニクイズ

16進数で表すと 12345678 となる4バイトのデータを、リトルエンディアンの方式で主記憶の100番地から順に格納した。100番地に入る値はどれか。

正解は 4番:78

リトルエンディアンは下位バイトから先に置きます。12345678 の下位バイトは末尾の 78 なので、先頭の100番地には 78 が入り、以降 56・34・12 と続きます。12 は上位バイトなので、これが先頭に来るのはビッグエンディアンです。「リトル=小さいほうの桁(下位)から」と結びつけてください。

間違えた用語の復習リストを見る →

この分野をまとめて解く → コンピュータ構成要素とハードウェアのミニテスト(全33問)

最終更新:2026-10-12