整数的按位左移超过 31 倍

  • 本文关键字:左移 整数 c
  • 更新时间 :
  • 英文 :

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.这里发生了什么。

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

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

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

最新更新