main()
{
int i=-1,j=32,k;
k=i<<j;
printf("i=%d j=%d k=%dn",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.这里发生了什么。
很抱歉问这样的问题。我是初学者,所以我无法理解编译器在这里的作用。你能解释一下吗?
当将值移动等于或大于其大小的量时,您不能指望获得有意义的结果。从标准:
如果右操作数的值为负数或大于或 等于提升的左操作数的宽度,行为为 定义。