对此代码的作用感到困惑
for (L=0; L < levels; L++, N_half>>=1){
func( y, N_half);
} // end: levels for loop
特别是这个“N_half&gt;&gt; = 1”
由于
答案 0 :(得分:9)
它通过在每次迭代时将N_half除以2来推进循环。它相当于:
for (L=0; L<levels; ++L, N_half=N_half / 2) {
...
}
答案 1 :(得分:5)
N_half>>=1
在N_half上执行1位逐位右移,(对于非负数)将其除以2。
>>=
是>>
,+=
是+
。
答案 2 :(得分:1)
&gt;&gt; =运算符将数字的位数向右移位
的示例:
二进制表格
N = 101010111 // 2-base arithmetic system
N >>= 1; // `division` by 2
N: 010101011
十进制表格
N = 123456 // 10-base arithmetic system
N >>= 2; // `division` by 10^2
N: 001234
作为通常的,内存中的数字是二进制形式,&gt;&gt; = 1相当于除以2。
答案 3 :(得分:0)
如果N_half是正整数或无符号整数,则将其减半。
答案 4 :(得分:0)
右移N_half为1(即将其除以2)并将结果存储回N_half
答案 5 :(得分:0)
这似乎与
相同for (L=0; L < levels; L++)
{
func(y, N_Half);
N_Half /= 2;
}
自从我回答这个问题以来,这个问题已被重新定义,因此这不再有效,但为了完整性而添加:如果在循环中没有其他任何内容,则相当于:
N_Half >>= levels;
注意事项: