按位左移整数超过31次

时间:2013-10-10 13:43:44

标签: c

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.its在左移32次后重复,即如果j = 64,则k变为-1并且如果j = 65则k = -2。但逻辑上应该丢失位,即输出为0.这里发生了什么。

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

1 个答案:

答案 0 :(得分:0)

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

  

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