エンディアン(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バイトのデータを置いてみます。
- ビッグエンディアン … 上位バイト(12)から置く。人が数字を書く順番と同じ
- リトルエンディアン … 下位バイト(78)から置く。人が書く順番とは逆
「ビッグ」「リトル」は、先に置くバイトの大きさを指しています。上位バイトは値としての重みが大きいので「ビッグ」、下位バイトは重みが小さいので「リトル」です。
ビッグエンディアンは、メモリ(主記憶)の中身をそのまま並べて読むと、人が書いた16進数と同じ順に読めます。デバッグ(プログラムの誤りを見つけて直す作業)のときに読みやすいのが利点です。
リトルエンディアンは逆順なので人には読みにくいのですが、下位バイトが先に来るので、繰り上がりのある計算を下の桁から始められます。また、4バイトのデータを「下位2バイトだけ」として読み直すときに、先頭番地を変えずに済みます。
どちらが正しいということはない
どちらが優れているという話ではありません。 プロセッサ(計算と命令の実行を受け持つ部品。CPUと同じものを指します)の設計者が決めたことで、両方が今も使われています。
- リトルエンディアン … Intel・AMD の x86系、いまのパソコンのプロセッサ
- ビッグエンディアン … 昔の Motorola 68000系、一部のメインフレーム
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