7

我知道它UINT32_MAX存在,但我无法使用它。我试printf("%d\n", UINT32_MAX);了一下,打印出来了-1。使用%ld而不是%d向我展示了 unsigned int 类型的错误,UINT32_MAX需要%d将其打印出来。

请帮忙,我理想中想要的是一个宏/枚举,它的最大值word_t是我定义的类型,目前是uint32_t.

我希望我能说清楚我想要什么,如果没有,请随时提问。

编辑

我忘了说我实际上想要做什么。所有这些都将用于将整数数组设置为其最大值,因为该整数数组实际上是将所有位设置为 1 的位图。

4

4 回答 4

12

uintN_t打印对象的可移植方式是将其转换为 auintmax_t并将j长度修饰符与u转换说明符一起使用:

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

j意味着参数是 anintmax_t或 a uintmax_t;表示u它是无符号的,所以它是一个uintmax_t.

或者,您可以使用中定义的格式字符串<inttypes.h>(在这种情况下,您将使用PRIu32):

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

您不能只使用%u,因为不能保证int至少由 32 位表示(它只需要由至少 16 位表示)。

于 2011-03-04T17:21:08.600 回答
4

你遇到了你的具体问题,因为%d它是一个签名的格式化程序。

有很多方法可以修复它(已经建议了两种),但真正正确的方法是使用定义的格式说明符<inttypes.h>

uint32_t number;
printf("number is %" PRIu32 "\n", number);
于 2011-03-04T17:30:38.117 回答
2

%d用于有符号整数。使用%u.

编辑:忽略这个答案并使用更完整的詹姆斯的答案。

于 2011-03-04T17:19:56.753 回答
0

如果您将 unsigned int 数组设置为最大值,则可以通过 memset 进行:

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

于 2011-03-04T17:26:17.610 回答