The following code output -1 1
in C++.
If i
is evaluated as -1, why is it larger than 0?
#include <stdio.h>
int main() {
auto i = -1 + unsigned(0);
printf("%d %d\n", i, i > 0);
}
If i is evaluated as -1
Thats a wrong premise.
i
is not -1
. Adding 0u
(or unsigned(0)
) to -1
results in an unsigned
. You may see -1
as output for i
because using the wrong format specifier with printf
is undefined.
This
#include <iostream>
int main() {
auto i = -1 + unsigned(0);
std::cout << i << " " << (i>0);
}
does not rely on guessing the type of i
and prints:
4294967295 1
unsigned(-1)
is the largest unsigned integer representable as unsigned
.