long long
нормально, но вы должны использовать суффикс для литерала.
long long x = 600851475143ll; // can use LL instead if you prefer.
Если вы оставите ll
в конце литерала, то компилятор предполагает, что вы хотите, чтобы он был int
, который в большинстве случаев является 32-разрядным числом со знаком. 32-битного недостаточно для хранения этого большого значения, отсюда и предупреждение. Добавляя ll
, вы указываете компилятору, что литерал следует интерпретировать как long long
, что достаточно для хранения значения.
Суффикс также полезен для указания какой перегрузки вызывать для функции. Например:
void foo(long long x) {}
void foo(int x) {}
int main()
{
foo(0); // calls foo(int x)
foo(0LL); // calls foo(long long x)
}