C ++ for-loop - 测试部分

时间:2012-08-11 12:32:10

标签: c++ for-loop

这是一个简单的问题,但我被困住了。以下是this paper中的准随机数生成器的代码。

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。有人可以解释发生了什么吗?

感谢。

2 个答案:

答案 0 :(得分:2)

相当于:

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

答案 1 :(得分:0)

如果整数非零(即严格为正或负),则整数计算结果为真。 这也代表了其他各种类型:当浮点值非零时,浮点值也为真,而且不等于NULL指针的指针也被认为是真的。