エンディアンはビットごとの操作でまったく問題になりますか? 論理的かシフトか?
ビット演算について宿題をやっているのですが、表も裏も作れず、エンディアンにかなりハマっていると思います。つまり、私はリトル エンディアン マシンを使用していますが (ほとんどのマシンと同様)、これを考慮する必要がありますか?それとも無駄な事実ですか?
念のため、C を使用しています。
他の人が述べたように、シフトは C 言語仕様によって定義され、エンディアンとは無関係ですが、右シフトの実装は、アーキテクチャが 1 の補数または 2 の補数演算を使用するかどうかによって異なる場合があります。
場合によります。数値を新しい型にキャストしなくても、エンディアンを透過的に処理できます。
ただし、操作に新しい型のキャストが含まれる場合は注意してください。
たとえば、一部のビットを右にシフトして (明示的または非明示的に) 新しい型にキャストする場合、エンディアンが重要です!
int
エンディアンをテストするには、 を にキャストするだけですchar
。
int i = 1;
char *ptr;
...
ptr = (char *) &i; //Cast it here
return (*ptr);