我知道UINT32_MAX
存在,但我无法使用它。我尝试printf("%d\n", UINT32_MAX);
并打印出-1
。使用%ld
代替%d
向我提出错误,UINT32_MAX
属于unsigned int类型,需要%d
才能将其打印出来。
请帮助,我理想的是一个宏/枚举,其中包含word_t
的最大值,这是我定义的类型,当前为uint32_t
。
我希望我明确表达我想要的东西,如果没有,请随意问。
修改
我忘了说我实际上想做什么。所有这些都将用于将整数数组设置为其最大值,因为该整数数组实际上是一个将所有位设置为1的位图。
答案 0 :(得分:11)
打印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位表示)。
答案 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);