在" x<< = 1"之后,值将永远为0反复?

时间:2012-07-11 21:09:07

标签: c bit-shift

我想知道x在以下程序中是否会达到零。

请考虑:

int main ()
{
    int x = 1;
    while (x)
      {
        x <<= 1;
      }
    return 0;
}

此程序的预期行为是正常退出还是永远循环?

1 个答案:

答案 0 :(得分:18)

x溢出时,它都没有(或两者)运行在未定义的行为中。

C99规范6.5.7节说:

  

E1的结果&lt;&lt; E2是E1左移E2位位置;腾出的位用零填充。如果E1具有无符号类型,则结果的值为E1×2 E2 ,比结果类型中可表示的最大值减少一个模数。如果E1有签名   类型和非负值,E1×2 E2 在结果类型中可表示,那么这就是结果值; 否则,行为未定义