プロジェクトの一環として、大きなループ (約 10^6 から 10^7 の繰り返し) 内でマスク計算を行う必要があります。任意の数の最下位ビット (1 ~ 8)、または任意のビットを特定の位置 (7 ~ 0、7 が最上位ビット) に保持する必要があります。メイン コードでマスクを計算しないようにするため、またパフォーマンスのために、次のアイデアを思い付きました (いずれの場合も、パラメーターは 0 から 7 までの符号なし char です)。
1) ヘッダー ファイル (bitops.h など) で定義された 2 つのグローバル配列を使用します。
char mask[8] = {1, 3, 7, 15, 31, 63, 127, 255};
char position[8] = {1, 2, 4, 8, 16, 32, 64, 128};
メモリの待ち時間が原因で待機する必要がある場合があります。
2) 簡単な操作 (マクロ経由) を使用してマスクを計算します。
#define mask(x) ((1 << (x + 1)) - 1)
#define position(x) (1 << x)
ここで、マスクには約 3 クロック サイクル、位置には 1 クロック サイクルしか必要ありません。
何を指示してるんですか?2 番目のオプションは実際には高速ですか? または、最初のオプションを選択した場合、プロセッサは事前に定数をキャッシュしますか?
御時間ありがとうございます!