long long是8个字节,但是我得到整数溢出?

Der*_*unk 12 c gcc integer

假设

  long long b = 5*1024*1024*1024; // 5 gigs, small enough for 64 bits
  printf ("%lu\n",sizeof(long long)); // prints 8 (bytes) = 64 bits
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨:

  warning: integer overflow in expression [-Woverflow]
Run Code Online (Sandbox Code Playgroud)

为什么会溢出,我错过了什么?

tep*_*pic 19

因为右侧的数字是类型int,而不是long long,所以int在表达式中执行算术,导致溢出.

如果你添加LL其中一个,它将全部推广它们.