Расчет и использование максимального значения uint32 t

Я знаю, что UINT32_MAX существует, но я не смог его использовать. Я пытался!--1--> и его -1. Используя %ld вместо %d представил мне ошибку, что UINT32_MAX имеет тип unsigned int и должен %d распечатать.

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

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

редактировать

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

4 ответов


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

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

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

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

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

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


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

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

uint32_t number;
printf("number is %" PRIu32 "\n", number);

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

EDIT: игнорируйте этот ответ и используйте James, который является более полным.


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

memset (array, 0xFF, sizeof (unsigned int) * arraysize);