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) отмечает возможность равенства.

Другие вопросы по тегам