Domanda

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?

È stato utile?

Soluzione

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.

Altri suggerimenti

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.

The appendix is wrong. The only guarantee is that sizeof(long) >= sizeof(int) >= sizeof(char) note the possibility of equality.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top