所以我有一个 for 循环,它是这样的:
for(span=N>>1;span;span>>=1)
我假设开始和结束条件相当于如下:
span = N>>1; //right shift N by 1 and initialize to span
while(span!=0)
{
span = span >> 1;
}
但是,在我的代码上下文中,这似乎有点奇怪。提前致谢!
所以我有一个 for 循环,它是这样的:
for(span=N>>1;span;span>>=1)
我假设开始和结束条件相当于如下:
span = N>>1; //right shift N by 1 and initialize to span
while(span!=0)
{
span = span >> 1;
}
但是,在我的代码上下文中,这似乎有点奇怪。提前致谢!
在每次迭代中,您都将变量跨度除以 2,直到它达到 0。
所以如果最初 N = 8,那么 span 的值将是 4、2、1、0 -> 退出循环
那是对的。
span = N >> 1
,将 N 右移 1。span
,相当于span != 0
。span
再次右移 1。在正整数的上下文中,这等价于for(span=N/2;span>0;span/=2)
。但是,在不了解您的特定背景的情况下,我无法评论这是否奇怪。
简短而甜蜜...是的,就您显示的代码而言,您的解释是坚定而好的。