0

8 個の uint64_t (512 ビット) の配列があります。関数パラメーターとして 2 つの数値も受け取ります。それらを 54 と 133 にします。位置 (ゼロベース) が 54 より低いか、または 133 より高いすべてのビットをマスクする必要があります。

それを行うための最も費用対効果の高い方法は何ですか?

1 つの uint64_t でこれを行うのは簡単です。

int a=6;
int b=12;
uint64_t source=0xD0400000000000;
uint64_t mask=0xFFFFFFFFFFFFFFFF;
uint64_t result=source&((mask<<(a+63-b))>>a);//D0000000000000

しかし、uint64_t (この場合は配列) より大きいデータには問題があります。また、別の問題は、これらのビットが複数の uint64_t のクロス境界を抽出したい場合です。
このコードは非常に高速である必要があるため、分岐やコストのかかる操作は避けなければなりません。

組み込み関数を使用して実装して高速に実行する方法はありますか?

4

1 に答える 1