这行代码有什么作用?

时间:2009-07-02 11:50:15

标签: c bit bit-shift

对此代码的作用感到困惑

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

特别是这个“N_half&gt;&gt; = 1”

由于

6 个答案:

答案 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;

注意事项:

  • 如果N_Half&lt; 2 ^级(0次迭代)
  • 如果N_Half&lt; 0(第一次右移将取决于实施使其为正数)