Home >Backend Development >C++ >Why Does -1 Compare as Greater Than 0 When Comparing Signed and Unsigned Integers in C ?
Understanding Negative Signed Integer Comparison with Unsigned Integer
In the provided C program, it's perplexing to observe the output "Greater" when comparing b (-1) with a.size() (0) despite -1 being arithmetically less than 0. This unexpected behavior arises from the fundamental differences between signed and unsigned integer types.
In this case, a.size() returns an unsigned integer, indicating the size of the vector. By contrast, b is a signed integer. When comparing these two values, the signed b is automatically promoted to an unsigned type. This promotion converts -1 to a large unsigned value, which exceeds 0.
This behavior is not limited to vector sizes. The following code snippet demonstrates the same issue:
#include <iostream> int main() { std::cout << std::boolalpha; unsigned int a = 0; int b = -1; std::cout << (b < a) << "\n"; }
When executed, this code outputs "false," indicating that -1 is considered greater than 0 in the context of an unsigned type.
To avoid such confusion, it's important to remember that signed and unsigned integers have distinct behaviors and should not be mixed without carefully considering the intended operation.
The above is the detailed content of Why Does -1 Compare as Greater Than 0 When Comparing Signed and Unsigned Integers in C ?. For more information, please follow other related articles on the PHP Chinese website!