0

数値を 2 で割る最良の方法は、1 ビット左に移動することです。2 の倍数 (たとえば 8) で割っている場合はどうすればよいですか? 3 ビット分移動しますか? ここに私の質問があります:

  1. C++ でビット移動などの操作を行うにはどうすればよいですか?
  2. 値を交換したい場合、int の上位バイトと int の下位バイトにアクセスするにはどうすればよいですか?

レジスタを扱っているため、これらの操作がアセンブリ レベルで実行できることはわかっていますが、C++ でそのようなものにアクセスできるかどうかはわかりません。

4

1 に答える 1

3

整数の上位/下位バイトへのアクセスとそれらの交換は、少なくとも2 つの方法で行うことができます。>>との組み合わせ|、またはunion.

たとえば、次のようなものです。

short swapped = (original<<8)|(original>>8);

スワップされた 2 バイト整数の 2 バイトが得られます。より大きな整数 (たとえば 4 バイト) がある場合、すべてのバイトが特にシャッフルされた順序で必要な場合は、さらにマスキングとシフトが必要になります。

右シフト ( ) を使用した 2 の倍数による除算>>の最適化は、非最適化です。何が意図されているかを明確に示す、読みやすいコードを作成する必要があります。コンパイラは、そのようなマイクロ最適化を自明に実行します。

于 2012-12-07T14:47:50.177 に答える