Jestem zaskoczony na tym fragmencie kodu:dlaczego w tym mnożeniu występuje przepełnienie liczby całkowitej?
#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;
}
Spodziewałem , jak powinno być, zamiast ja dostaję. Używanie unsigned nie wydaje się pomóc. co daje?
long max 9223372036854775807
2 * 1024 * 1024 * 1024 = -2147483648
jeśli wpiszesz '1024', to już ma typ danych, w tym języku jest liczbą całkowitą. Dlatego musisz podać '1024L', jeśli chcesz mieć długi typ danych. – eis