2012-08-11 64 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也被认为是真的。