0

これは簡単な質問ですが、私は立ち往生しています。このペーパーの準乱数ジェネレーターのコードは次のとおりです。

void PlaneHammersley(float *result, int n)
{
float p, u, v;
int k, kk, pos;

for (k=0, pos=0 ; k<n ; k++) {

u = 0;
for (p=0.5, kk=k ; kk ; p*=0.5, kk>>=1)
   if (kk & 1) // kk mod 2 == 1
     u += p;
v = (k + 0.5) / n;
result[pos++] = u;
result[pos++] = v;
}
}

私はPythonで翻訳しようとしていますが、2番目のforループは私には不思議です。終了条件はkkintであり、いつTrueと評価されるかはわかりません。誰かが何が起こっているのか説明できますか?

ありがとう。

4

2 に答える 2

2

に相当:

for (p=0.5, kk=k ; kk != 0; p*=0.5, kk>>=1)
于 2012-08-11T12:36:48.487 に答える
0

整数がゼロ以外(つまり、厳密に正または負)の場合、整数はtrueと評価されます。これは、他のさまざまなタイプも表します。浮動小数点値は、ゼロ以外の場合にもtrueになり、ポインターと等しくないNULLポインターもtrueと見なされます。

于 2012-08-11T12:35:06.317 に答える