Ответ 1
Поскольку числа с правой стороны имеют тип int
, а не long long
, поэтому в выражении выполняется арифметика int
, что приводит к переполнению.
Если вы добавите LL
к одному из них, это будет способствовать их продвижению.
Предположим, что
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
к одному из них, это будет способствовать их продвижению.