计算和使用uint32_t的最大值

时间:2011-03-04 17:16:06

标签: c gcc c99

我知道UINT32_MAX存在,但我无法使用它。我尝试printf("%d\n", UINT32_MAX);并打印出-1。使用%ld代替%d向我提出错误,UINT32_MAX属于unsigned int类型,需要%d才能将其打印出来。

请帮助,我理想的是一个宏/枚举,其中包含word_t的最大值,这是我定义的类型,当前为uint32_t

我希望我明确表达我想要的东西,如果没有,请随意问。

修改

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

4 个答案:

答案 0 :(得分:11)

打印uintN_t对象的便携方式是将其转换为uintmax_t,并将j长度修饰符与u转换说明符一起使用:

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

j表示参数为intmax_tuintmax_t; u表示它是未签名的,因此它是uintmax_t

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

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

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

答案 1 :(得分:3)

您遇到了特定问题,因为%d是签名格式化程序。

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

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

答案 2 :(得分:2)

%d用于签名整数。使用%u

编辑:忽略这个答案并使用James's,这是更完整的。

答案 3 :(得分:0)

如果你将unsigned int数组设置为最大值,你可以通过memset来实现:

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