1

对这段代码的作用感到困惑

for (L=0; L < levels; L++, N_half>>=1){
    func( y, N_half);
} // end: levels for loop

特别是这个“ N_half>>=1 ”

谢谢

4

6 回答 6

9

它通过在每次迭代中将 N_half 除以 2 来推进循环。它相当于:

for (L=0; L<levels; ++L, N_half=N_half / 2) {
    ...
}
于 2009-07-02T11:53:11.990 回答
5

N_half>>=1对 N_half 执行 1 位按位右移,(对于非负数)将其除以 2。

>>=就是>>这样。+=_+

于 2009-07-02T11:53:31.473 回答
1

>>= 运算符将数字的数字向右移动 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。

于 2009-07-02T12:01:39.633 回答
0

如果 N_half 是正整数或无符号整数,则将其减半。

于 2009-07-02T11:53:39.180 回答
0

它将 N_half 右移 1(即除以 2)并将结果存储回 N_half

于 2009-07-02T11:56:29.597 回答
0

这似乎与

for (L=0; L < levels; L++)
{
  func(y, N_Half); 
  N_Half /= 2;
}

自从我回答以来,这个问题已经被改写了,因此这不再有效,但为了完整性而添加:如果在循环中没有做任何其他事情,它相当于:

N_Half >>= levels;

注意事项:

  • 如果 N_Half < 2^levels(多次迭代为 0)
  • 如果 N_Half < 0(第一次右移将取决于实现使其成为正数)
于 2009-07-02T11:59:46.407 回答