在C ++中30移位后二进制左移如何表现?

在C ++中int是4个字节,这意味着int内存可以存储32位,那么

int i = 1;
i = i<<32;
cout<<i<<endl;

给我以下错误:

main.cpp:7:5: warning: shift count >= width of type
      [-Wshift-count-overflow]
  i <<= 32;

  int i = 1;
    i = i<<31;
    cout<<i<<endl;

给我

./main
-2147483648

  int i = 1;
    i = i<<30;
    cout<<i<<endl;

给我

./main
1073741824

怎么了?

评论