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

假设

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 

但编译器抱怨:

  warning: integer overflow in expression [-Woverflow] 

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

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

如果你向其中一个添加LL ,它将全部提升它们。