UINT_MAX такой же, как ULONG_MAX в C - PullRequest
0 голосов
/ 17 марта 2012

Решая упражнения из книги K & R C, я наткнулся на упражнение 2.1.

Сначала я получил UINT_MAX как -1, но затем я использовал заполнитель %u, но теперь он дает мне тот же номер, что и ULONG_MAX.

В книге в Приложении B говорится, что UINT_MAX должно быть 65535, а ULONG_MAX должно быть 4294967295, но при выполнении упражнения оно дает мне для UINT_MAX и ULONG_MAX как 4294967295.

Почему это?

Ответы [ 3 ]

5 голосов
/ 17 марта 2012

Прежде всего, правильный способ печати unsigned long - это не %u, а %lu.Во-вторых, стандарт гласит: минимальное значение UINT_MAX равно 65535. Оно может быть (и обычно) больше.1010 *

Их определяемые реализацией значения должны быть равными или большими по величине (абсолютное значение) показанным с тем же знаком.

1 голос
/ 17 марта 2012

На 32-битных платформах int и long обычно одинаковы, поэтому их максимальные значения также одинаковы. То же самое относится и к своим неподписанным коллегам.

0 голосов
/ 27 мая 2013

Приложение неверно.Единственная гарантия состоит в том, что sizeof (long)> = sizeof (int)> = sizeof (char) отмечает возможность равенства.

...