Я пытаюсь выполнить упражнение 2-1 из K&R C, но когда я запускаю программу, результат такой:
UNSIGNED TYPES
UNSIGNED CHAR: 0 255
UNSIGNED SHORT: 0 65535
UNSIGNED INT: 0 -1
UNSIGNED LONG; 0 -1
Результат UNSIGNED INT
и UNSIGNED LONG
не должен был быть -1
, он должен был быть значением в ссылке. (Приложение B.11, стр. 213)
/* UNSIGNED TYPES */
printf("\n\tUNSIGNED TYPES\n");
printf("UNSIGNED CHAR: %d %d\n", 0, UCHAR_MAX);
printf("UNSIGNED SHORT: %d %d\n", 0, USHRT_MAX);
printf("UNSIGNED INT: %d %d\n", 0, UINT_MAX);
printf("UNSIGNED LONG: %d %d\n", 0, ULONG_MAX);
Странно то, что я не думаю, что с моим кодом что-то не так, минимальный диапазон равен 0
, потому что я читал, что unsigned
типы неотрицательны. Я уже включил limits.h
и float.h
.
Как решить эту проблему?
Ссылка на полную программу находится здесь.
ОБНОВЛЕНИЕ 1: я попытался заменить %d
максимального диапазона на unsigned long
, и это, похоже, сработало, но unsigned int
стало 4294967925
вместо 65535
. Спасибо, что помогли мне решить проблему unsigned long
, и я надеюсь, что вы, ребята, поможете мне с проблемой unsigned int
.
ОБНОВЛЕНИЕ 2: я изменил последовательность символов ULONG_MAX
с %ul
на %lu
.
Вот код и результат:
Код:
/* UNSIGNED TYPES */
printf("\n\tUNSIGNED TYPES\n");
printf("UNSIGNED CHAR: %d %u\n", 0, UCHAR_MAX);
printf("UNSIGNED SHORT: %d %u\n", 0, USHRT_MAX);
printf("UNSIGNED INT: %d %u\n", 0, UINT_MAX);
printf("UNSIGNED LONG: %d %lu\n", 0, ULONG_MAX);
Результат:
UNSIGNED TYPES
UNSIGNED CHAR: 0 255
UNSIGNED SHORT: 0 65535
UNSIGNED INT: 0 4294967925
UNSIGNED LONG; 0 4294967925
%ul
должно быть%lu
, и вы неправильно расшифровалиl
как1
в последней строке результата. - person M.M   schedule 26.05.2014%ul
, но не могли бы вы объяснить (если знаете), почему%ul
добавляет единицу в концеULONG_MAX
? а почему%lu
нет? - person Alexander B. Falgui   schedule 26.05.2014%ul
это%u
, за которым следует букваl
. - person M.M   schedule 26.05.2014