I was expecting this to print a very large number and that same number -1 but it just prints -1 and -2, why is this?
fprintf(stderr, "%d\n", 0xffffffff);
fprintf(stderr, "%d\n", 0xfffffffe);
I was expecting this to print a very large number and that same number -1 but it just prints -1 and -2, why is this?
fprintf(stderr, "%d\n", 0xffffffff);
fprintf(stderr, "%d\n", 0xfffffffe);
The %d
format is a signed integer (decimal). Integers are stored using two's complement, which means that the high-order bit (8000 0000) indicates, in a manner of speaking, the sign of the value.
Counting down from 3, values are:
0000 0003 = 3
0000 0002 = 2
0000 0001 = 1
0000 0000 = 0
FFFF FFFF = -1
FFFF FFFE = -2
etc.
If you want FFFF FFFF to display as a large positive number, use the %u
(unsigned) format.
The values you mention are the two's complement representation of -1 and -2
Look up two's complement
The first bit on a signed integer is the sign, so the highest number that could be stored is 0xEFFFFFFF.
The argument "%d" prints the input as a signed integer. As a result, you have discovered the two's complement representation, consider "%u" instead.