2012-08-11 51 views
0

這是一個簡單的問題,但我卡住了。這裏是一個準隨機數發生器的代碼this paperC++的for循環 - 測試部分

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中進行翻譯,第二個for循環對我來說是神祕的。結束條件是kk這是一個int,我不知道它何時評估爲True。有人可以解釋發生了什麼嗎?

謝謝。

+3

非零=真 – Gir 2012-08-11 12:33:07

+0

我很好奇,怎麼這個代碼工作 – texasbruce 2012-08-11 13:34:09

回答

2

等同於:

for (p=0.5, kk=k ; kk != 0; p*=0.5, kk>>=1) 
0

一個整數在非零(即嚴格爲正或負)時評估爲真。 這也代表了其他各種類型:浮點值在非零時也是如此,並且指針不等於指針NULL也被認爲是真的。