Reputation: 3327
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?
Upvotes: 0
Views: 9413
Reputation: 11
The appendix is wrong. The only guarantee is that sizeof(long) >= sizeof(int) >= sizeof(char) note the possibility of equality.
Upvotes: 0
Reputation: 409286
On 32-bit platforms, int
and long
are usually the same, and so their max are also the same. The same for their unsigned counterparts of course.
Upvotes: 1
Reputation: 182664
First of all, the right way to print an unsigned long
is not %u
but %lu
. Second, the standard says the minimum value of UINT_MAX
is 65535. It can be (and usually is) larger.
5.2.4.2.1 Sizes of integer types
Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.
Upvotes: 5