UINT_MAX the same as ULONG_MAX in C

对着背影说爱祢 提交于 2019-12-13 05:45:32

问题


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?


回答1:


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.




回答2:


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.




回答3:


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



来源:https://stackoverflow.com/questions/9749930/uint-max-the-same-as-ulong-max-in-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!