3 * 1000000000 overflows as an int, but the variable is long long. Why?

c++, integer-overflow, literals, long-long

Solution

Integer constants are, by default `int`s.

1000000000

That can fit into an `int`. So, this constant gets parsed as an `int`. But multiplying it by 3 overflows int.

10000000000

This is too big to an int, so this constant is a `long long`, so the resulting multiplication does not overflow.

Solution: explicitly use `long long` constants:

long long calcOne = 3 * 100000000LL;     // 3e8, essentially
long long calcTwo = 3 * 1000000000LL;    // 3e9, essentially
long long calcThree = 3 * 10000000000LL; // 3e10, essentially

Problem

I have a simple c++ app that performs the following calculations ``` long long calcOne = 3 * 100000000; // 3e8, essentially long long calcTwo = 3 * 1000000000; // 3e9, essentially long long calcThree = 3 * 10000000000; // 3e10, essentially ``` If I write the result of each calculation I get the following output: ``` calcOne = 300000000 calcTwo = -1294967296 calcThree = 30000000000 ``` So why does the second calculation fail? As far as I can tell it is within the limits of a long long type (calcThree was larger...). I am using Visual Studio 2015 on Windows 10. Thanks in advance.

Original source

Related problems