UINT_MAX такой же, как ULONG_MAX в C
Решая упражнения из книги K&R C, я наткнулся на упражнение 2.1.
Сначала я получил как UINT_MAX
как -1
, но потом я использовал %u
заполнитель, но теперь он дает мне тот же номер, что и ULONG_MAX
,
В книге в Приложении B говорится, что UINT_MAX
должно быть 65535
а также ULONG_MAX
должно быть 4294967295
, но когда я выполняю упражнение, это дает мне обоим UINT_MAX
а также ULONG_MAX
как 4294967295
,
Это почему?
3 ответа
Прежде всего, правильный способ напечатать unsigned long
не является %u
но %lu
, Во-вторых, стандарт гласит минимальное значение UINT_MAX
65535. Может быть (и обычно) больше.
5.2.4.2.1 Размеры целочисленных типов
Их определяемые реализацией значения должны быть равны или больше по величине (абсолютное значение) показанным с тем же знаком.
На 32-битных платформах, int
а также long
обычно одинаковы, и поэтому их максимальные значения также одинаковы. То же самое для их неподписанных коллег, конечно.
Приложение неверно. Единственная гарантия состоит в том, что sizeof(long) >= sizeof(int) >= sizeof(char) отмечает возможность равенства.