warning c4307 integral constant overflow in C
c, c++, compiler-errors, largenumber, variables
Solution
The expression `(8 * (512 * 786432))` has type `int` and it will overflow on 32-bit systems. Assigning it to a variable of type `long` does not change the fact that the value has already overflowed. You can fix this by annotating the numbers.
long x = (8L * (512L * 786432L));
You only need to put the `L` on one of the numbers, since it will force results to also have type `long`.
This assumes that `long` is 64-bit, which is true on most systems but not Windows. You will need `LL` (or `i64`) on Windows.
Problem
I have this operation (8 * (512 * 786432)) and the product is 3221225472 I tried to use it with variables like longlong, unsigned long But the compiler throw me an error c4307 integral constant overflow and I need the result for use it with functions, how can I fix it? or what variables can work for large numbers? regards