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]

Почему он переполняется, что мне не хватает?

Ответ 1

Поскольку числа с правой стороны имеют тип int, а не long long, поэтому в выражении выполняется арифметика int, что приводит к переполнению.

Если вы добавите LL к одному из них, это будет способствовать их продвижению.