对这段代码的作用感到困惑
for (L=0; L < levels; L++, N_half>>=1){
func( y, N_half);
} // end: levels for loop
特别是这个“ N_half>>=1 ”
谢谢
它通过在每次迭代中将 N_half 除以 2 来推进循环。它相当于:
for (L=0; L<levels; ++L, N_half=N_half / 2) {
...
}
N_half>>=1
对 N_half 执行 1 位按位右移,(对于非负数)将其除以 2。
>>=
就是>>
这样。+=
_+
>>= 运算符将数字的数字向右移动 k 个位置
例子:
二进制形式
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
像往常一样,内存中的数字是二进制形式,>>=1 相当于除以 2。
如果 N_half 是正整数或无符号整数,则将其减半。
它将 N_half 右移 1(即除以 2)并将结果存储回 N_half
这似乎与
for (L=0; L < levels; L++)
{
func(y, N_Half);
N_Half /= 2;
}
自从我回答以来,这个问题已经被改写了,因此这不再有效,但为了完整性而添加:如果在循环中没有做任何其他事情,它相当于:
N_Half >>= levels;
注意事项: