我在下面的代码中遇到了这个意外的输出,当我将所有位都设置为1时,我正在验证short和int类型的无符号形式的最大值(以十进制形式表示)。
#include <stdio.h>
int main()
{
unsigned int n1 = 0xFFFFFFFF;
unsigned short n2 = 0xFFFF;
printf("\nMax int = %+d", n1);
printf("\nMax short = %+d", n2);
return 0;
}
我得到的输出是(使用Visual Studio 2017 C / C ++编译器编译):
Max int = -1
Max short = +65535
沿着unsigned short的行,我期望unsigned int的最大值为+4294967295。为什么不是这样呢?
答案 0 :(得分:8)
您需要使用%u
作为unsigned
类型的格式说明符。
答案 1 :(得分:3)
使用printf()
,格式字符串中的转换必须与参数类型匹配,否则行为未定义。 %d
适用于int
。
尝试使用最大值:
#include <stdio.h>
int main()
{
printf("Max unsigned int = %u\n", (unsigned)-1);
printf("Max unsigned short = %hu\n", (unsigned short)-1);
return 0;
}
附注:
-1
强制转换为该类型。stdout
缓冲区,默认设置为行缓冲。