バイトオーダ(byte order)
(1999/04/11 [日])
バイトオーダとはバイトの並び順のことを言います。例えば、little endian と big endian ではバイトオーダが違います。バイトオーダが違うだけで、どのような利点欠点が生まれるのでしょうか。ここでは、little endian と big endian のバイトオーダの違いによる利点について考えてみましょう。
どうも、little endian の方が計算機には向いているような感じですが、どうでしょうか。ここで、C 言語におけるエンディアンの違いについて簡単に考えてみましょう。
あなたなら、どっちがいい?
endian | 利点 |
---|---|
big endian | メモリ中のイメージと値の表現が一致しているので理解しやすい |
little endian | (1)バイト長を知らなくても任意のビットを切り出すことができる。たとえば、アドレスmから始まるメモリ中のnビット目を取り出すことを考えると、 m[n/8]>>(n%8) の計算をしその最下位ビットであらわすことができる。 (2)効率的に計算できる。加算の場合、下位桁を足し、そのキャリーと上位桁を順番に計算していくことで効率的に計算することができる。 |
どうも、little endian の方が計算機には向いているような感じですが、どうでしょうか。ここで、C 言語におけるエンディアンの違いについて簡単に考えてみましょう。
endian | 説明 |
---|---|
big endian | 扱いを間違ったら正しく動かない。C 言語のようないいかげんな言語では特に重要である。例えば、void twice(x) unsigned char *x;{ *x *= 2; } のような関数があった場合、うっかり、int x = 3; twice(&x); と記述してもその結果は間違った値になるので、バグであることがわかる。 |
little endian | 多少扱いを間違っても動く。C 言語のようないいかげんな言語では特に便利である。例えば、void twice(x) unsigned char *x;{ *x *= 2; } のような関数があった場合でも、int x = 3; twice(&x); で正しく計算できる。 |
あなたなら、どっちがいい?
by seclan