John Voss -4 years ago 125

C++ Question

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.

Recommended for you: Get network issues from **WhatsUp Gold**. **Not end users.**

Answer Source

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
```

Recommended from our users: **Dynamic Network Monitoring from WhatsUp Gold from IPSwitch**. ** Free Download**

Latest added