在解决 K&R C 书中的练习时,我偶然发现了练习 2.1。
起初我得到 as UINT_MAX
,-1
但后来我使用了%u
占位符,但现在它给了我与 相同的数字ULONG_MAX
。
在附录 B 的书中,他们说UINT_MAX
应该是65535
和ULONG_MAX
应该是4294967295
,但是在运行练习时,它给了我两个UINT_MAX
和ULONG_MAX
as 4294967295
。
这是为什么?
在解决 K&R C 书中的练习时,我偶然发现了练习 2.1。
起初我得到 as UINT_MAX
,-1
但后来我使用了%u
占位符,但现在它给了我与 相同的数字ULONG_MAX
。
在附录 B 的书中,他们说UINT_MAX
应该是65535
和ULONG_MAX
应该是4294967295
,但是在运行练习时,它给了我两个UINT_MAX
和ULONG_MAX
as 4294967295
。
这是为什么?
首先,打印 an 的正确方法unsigned long
是 not %u
but %lu
。其次,标准规定最小值是UINT_MAX
65535。它可以(并且通常是)更大。
5.2.4.2.1 整数类型的大小
它们的实现定义值的大小(绝对值)应等于或大于所示值,符号相同。
在 32 位平台上,int
通常long
是相同的,因此它们的最大值也相同。当然,对于他们未签名的同行也是如此。
附录是错误的。唯一的保证是 sizeof(long) >= sizeof(int) >= sizeof(char) 注意相等的可能性。