UINT_MAX与C中的ULONG_MAX相同

在解决K&R C书中的练习时,我偶然发现了练习2.1。

起初我把UINT_MAX作为-1 ,但后来我使用了%u占位符,但现在它给了我与ULONG_MAX相同的数字。

在附录B的书中,他们说UINT_MAX应该是65535ULONG_MAX应该是4294967295 ,但是在运行练习时,它给我的UINT_MAXULONG_MAX都是4294967295

这是为什么?

首先,打印unsigned long的正确方法不是%u而是%lu 。 其次,标准说UINT_MAX 的最小值是65535.它可以(通常是)更大。

5.2.4.2.1整数类型的大小

它们的实现定义值的大小 (绝对值)应等于或大于所示的值,并带有相同的符号。

在32位平台上, intlong通常是相同的,因此它们的max也是相同的。 当然,他们的未签约同行也是如此。

附录是错误的。 唯一的保证是sizeof(long)> = sizeof(int)> = sizeof(char)注意相等的可能性。