|
はじめまして。プログラム初心者 ぺーぺーです。 今まで、リトルエンディアンを扱うCPUで考えて作ったプログラムをビッグエンディアン系コンピュータで動作するプログラムにしようとしています。
そこで困っているのが、ビットシフトを行うときにどうすればよいかということです。 ビット列とアドレスの関係として、
ビット 15
14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 アドレス 1000H 1001H
ビッグエンディアンの場合
ビット 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
アドレス1000H 1001H リトルエンディアンの場合
と言う説明がここに載っていました。http://www.geocities.co.jp/SiliconValley/3150/endian.html
まず、疑問なのがリトルエンディアンで例えば0x6789を表すと ビット 1110
0110 1001 0001 アドレス 1000 1001 1002
1003
ビッグエンディアンの場合 ビット 0110 0111 1000 1001 アドレス 1000 1001
1002
1003 となっているのでしょうか?
そして、これを3ビット左シフトした場合、(巡回ではない) リトルエンディアンの場合 0011
0100 1000 1000
ビッグエンディアンの場合 0011 1100 0100
1000 となるのでしょうか?
もともと、リトルエンディアンを考えて行っていた計算は
ushort
pn; pn = (pn >> 2) + (((pn << 1) ^ (pn << 8) &
0x0300);
です。
これをビッグエンディアンで行う場合にどうすればよいか知りたかった のですが、いろいろ考えているうちにドツボにはまりました。
基本的な質問で申し訳ないのですが、非常に困っています。 ご回答、どうかよろしくお願い致します
|