Расчет и использование максимального значения uint32_t - PullRequest
6 голосов
/ 04 марта 2011

Я знаю, что UINT32_MAX существует, но я не смог его использовать. Я попытался printf("%d\n", UINT32_MAX);, и он распечатал -1. Использование %ld вместо %d привело меня к ошибке, что UINT32_MAX относится к типу unsigned int и ему нужно %d, чтобы распечатать его.

Пожалуйста, помогите, в идеале мне нужен макрос / перечисление, в котором содержится максимальное значение word_t, которое является определенным мной типом, который в настоящее время равен uint32_t.

Я надеюсь, что я ясно дал понять, чего хочу, если нет, пожалуйста, не стесняйтесь спрашивать.

EDIT

Я забыл сказать, что я на самом деле пытаюсь сделать. Все это будет использоваться, чтобы установить для массива целых чисел все их максимальное значение, потому что этот массив целых чисел фактически является битовой картой, которая установит все биты в 1.

Ответы [ 4 ]

11 голосов
/ 04 марта 2011

Переносимый способ напечатать объект uintN_t - привести его к uintmax_t и использовать модификатор длины j с спецификатором преобразования u:

printf("%ju\n", (uintmax_t)(UINT32_MAX));

j означает, что аргумент является либо intmax_t, либо uintmax_t; u означает, что он без знака, поэтому это uintmax_t.

Или вы можете использовать строки формата, определенные в <inttypes.h> (в этом случае вы бы использовали PRIu32):

printf("%" PRIu32 "\n", UINT32_MAX);

Вы не можете просто использовать %u, потому что не гарантируется, что int представлен по крайней мере 32 битами (он должен быть представлен только по крайней мере 16 битами).

3 голосов
/ 04 марта 2011

Вы столкнулись с конкретной проблемой, потому что %d является подписанным форматером.

Существует несколько способов ее исправить (два уже предложены), но действительно правильноможно использовать спецификаторы формата, определенные в <inttypes.h>:

uint32_t number;
printf("number is %" PRIu32 "\n", number);
2 голосов
/ 04 марта 2011

%d для целых чисел со знаком.Используйте %u.

РЕДАКТИРОВАТЬ: игнорировать этот ответ и использовать Джеймс, который является более полным.

0 голосов
/ 04 марта 2011

Если вы устанавливаете для массива unsigned int максимальное значение, вы можете сделать это через memset:

memset (массив, 0xFF, sizeof (unsigned int) * arraysize);

...