平成23年度 特別 午前 問11
コンピュータ構成要素
ビッグエンディアンに関する問題
主記憶の 1000 番地から,表のように 4 バイトの整数データが格納されている。これを 32 ビットのレジスタにロードするとき,プロセッサのエンディアンとレジスタにロードされる数値との組合せとして,正しいものはどれか。
| バイトアドレス | データ |
|---|---|
| 1000 | 00 |
| 1001 | 01 |
| 1002 | 02 |
| 1003 | 03 |
| リトルエンディアン | ビッグエンディアン | |
|---|---|---|
| ア | 00010203 | 02030001 |
| イ | 00010203 | 03020100 |
| ウ | 02030001 | 00010203 |
| エ | 03020100 | 00010203 |
- ア00010203 02030001
- イ00010203 03020100
- ウ02030001 00010203
- エ03020100 00010203
答えと解説を見る
✓ これが正解エ03020100 00010203
解説
小さい番地に上位を置く側が00010203になります。
分かれ目は、いちばん小さい番地に値のどちら側の端を置くか、その一点だけです。名前のとおりに覚えると取り違えません。ビッグエンディアンは大きいほうのけた、つまり上位のバイトを小さい番地に置きます。リトルエンディアンは小さいほうのけた、つまり下位のバイトを小さい番地に置きます。主記憶には、1000番地から順に00、01、02、03と並んでいます。上位のバイトを先に置く方式なら、1000番地の00が最上位ですから、レジスタには番地の順にそのまま00010203と入ります。人が数値を読み書きする順と同じ並びになるので、表を上から読んだものがそのまま答えになります。下位のバイトを先に置く方式なら、1000番地の00が最下位ですから、上位から並べ直すと番地の逆順になり、03020100と入ります。この二つを組み合わせた行が正解です。確かめの型として、先に上位を先頭に置く側の値を決め、残りをもう一方へ回すと迷いません。もう一つ注意したいのは、この並べ替えが1バイトを単位として端から端まで及ぶという点です。数バイトずつの塊を作り、その塊ごと位置を入れ替えるような読み方をすると、実際の並びとは別のものになります。
ほかの選択肢はなぜ違うのか
- ア00010203 02030001:下位を先に置く側に表の並びそのままの値を割り当てており、上下が逆です。もう一方に置かれた02030001も、2バイトずつの塊を単位に入れ替えた並びで、1バイト単位の反転になっていません。
- イ00010203 03020100:表の並びそのままの値と、端から端まで反転させた値を、どちらも相手側に割り当てた形です。上位を小さい番地に置くという名前の意味をそのまま取り違えると、この行を選びます。
- ウ02030001 00010203:上位を先に置く側の値は正しいのですが、もう一方に02030001が置かれています。これは00 01と02 03という2バイトずつの塊の位置を入れ替えた並びで、下位から順に置いた結果にはなりません。
出典:平成23年度 特別 応用情報技術者試験 午前 問11(改変:原典の図表をテキストに書き起こした)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)