While solving exercises from the K&R C book, I stumbled upon the exercise 2.1.
At first I got as UINT_MAX
as -1
, but then I used the %u
placeholder, but now its giving me the same number as ULONG_MAX
.
In the book in Appendix B, they say that UINT_MAX
should be 65535
and ULONG_MAX
should be 4294967295
, but when running the exercise, its giving me for both UINT_MAX
and ULONG_MAX
as 4294967295
.
Why is that?
On 32-bit platforms,
int
andlong
are usually the same, and so their max are also the same. The same for their unsigned counterparts of course.The appendix is wrong. The only guarantee is that sizeof(long) >= sizeof(int) >= sizeof(char) note the possibility of equality.
First of all, the right way to print an
unsigned long
is not%u
but%lu
. Second, the standard says the minimum value ofUINT_MAX
is 65535. It can be (and usually is) larger.