Я озадачен на этом фрагменте кода:Почему в этом умножении происходит целочисленное переполнение?
#include <climits>
#include <iostream>
int main(void) {
using namespace std;
cout << "long max " << LONG_MAX << endl;
long x = 2 * 1024 * 1024 * 1024;
cout << "2 * 1024 * 1024 * 1024 = " << x << endl;
return 0;
}
Я ожидал , как это должно быть, а я получаю. Использование unsigned не помогает. что дает?
long max 9223372036854775807
2 * 1024 * 1024 * 1024 = -2147483648
, если вы наберете '1024', он уже имеет тип данных, причем этот язык является целым числом. Вот почему вам нужно указать '1024L', если вам нужен длинный тип данных. – eis