意外的无符号整数行为

mma*_*mma 1 c

我在下面的代码中遇到了这个意外的输出,当我将所有位都设置为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;
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是(使用Visual Studio 2017 C/C++编译器编译):

Max int = -1
Max short = +65535
Run Code Online (Sandbox Code Playgroud)

沿着unsigned short的行,我期待unsigned int的最大值为+4294967295.为什么不是这样?

Bat*_*eba 9

您需要使用类型%u的格式说明符unsigned.