Home >Backend Development >C++ >Why Does 200020002000 * 2000 Cause Overflow in C But Not pow(2000, 4) or Direct Assignment?
Why 200020002000*2000 Causes Overflow in C
When assigning the value of 200020002000*2000 to a long long variable, an overflow occurs. However, using pow(2000,4) or directly assigning 16000000000000 to a long long int does not result in an overflow.
Reason for Overflow
The integer literals 2000 are implicitly cast to int type by default, which is typically 32-bit. Arithmetic operators always promote the arguments to the larger of the types present, but not smaller than int. Therefore, in this case, the multiplication is performed as int*int, which produces an int result.
Overflow vs. Non-Overflow Scenarios
In the second scenario, where pow(2000,4) is used, the pow function promotes the arguments to double and returns a double value. This ensures that no overflow occurs during the calculation.
In the third scenario, where 16000000000000 is directly assigned to a long long int, the literal is large enough to be implicitly cast to long long. The assignment is therefore performed without issue.
Resolution
To prevent overflow in the first scenario, you should explicitly cast the integer literals to long long using the LL suffix:
long long n = 2000LL*2000LL*2000LL*2000LL;
The above is the detailed content of Why Does 200020002000 * 2000 Cause Overflow in C But Not pow(2000, 4) or Direct Assignment?. For more information, please follow other related articles on the PHP Chinese website!