-5
main()
{
   int i=-1,j=32,k;
   k=i<<j;
   printf("i=%d j=%d k=%d\n",i,j,k);
}

输出:

i=-1 j=32,k=-1

如果我取j = 33 k=-2,那么如果j = 34,那么k = -4。它在左移32次后重复,即如果j = 64,k变为-1,如果j = 65,则k = -2。但逻辑上位应该丢失,即输出为 0。这里发生了什么。

很抱歉提出这样的问题。我是初学者,所以我无法理解编译器在这里做了什么。你可以解释吗?

4

1 回答 1

1

在将值移动等于或大于其大小的量时,您不能指望得到有意义的结果。从标准:

如果右操作数的值为负数或大于或等于提升的左操作数的宽度,则行为未定义。

于 2013-10-10T13:46:53.517 回答