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.这里发生了什么。
很抱歉提出这样的问题。我是初学者,所以我无法理解编译器在这里做了什么。你能解释一下吗?
答案 0 :(得分:0)
当将值移动等于或大于其大小的值时,您不能指望获得有意义的结果。从标准:
如果右操作数的值为负或大于或 等于提升的左操作数的宽度,行为是 未定义。