1

重複の可能性:
モジュロ演算子が必要なのはなぜですか?

モジュラスをどのように&与えるかを理解するのに助けが必要ですか?メモリアクセス時間を使用してキャッシュサイズを決定する割り当てに取り組んでいます。現在、L3サイズで奇妙な結果が出ています。&2の累乗でしかうまく機能しないことと関係があると思いますか?だから私はそれが実際にどのように機能するかを理解したい

lengthMod = 1024/sizeof(int) - 1;
for (unsigned int k = 0; k < REPS; k++) {
    data[(k * 16) & lengthMod]++;
}

&常に機能しますか?それとも、一部の値でのみ機能しますか?他の値は実際にどうなりますか?

4

3 に答える 3

2

&はバイナリの「and」演算子です。モジュラスの演算子はです%

于 2012-10-05T02:02:01.027 に答える
1

&は、2つの値の間でビット単位の演算を実行します。モジュラスの場合、%演算子を使用します。

int x = 23 % 7; // x = 2
于 2012-10-05T02:03:41.387 に答える
1

他の答えを拡張するために、正の数と2の正の累乗のモジュラス(つまりa % bbは2の累乗でありa、は正である)をとると、演算子を演算子にb効果的に置き換えることができます(そしてから1を引く) bなので、)になります。%&a & (b - 1)

これは、&演算子がビット単位のマスクを実行し、数値modの結果が2の累乗であるため、その数値の下位ビットになります。

これは、右側の引数が2の累乗であり、両方の数値が正の場合にのみ機能します。それ以外の場合は、%演算子を使用してください。

于 2012-10-05T02:08:43.250 に答える