Расчет и использование максимального значения 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);