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
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.
Try to use
(8 * (512ull * 786432))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With