C中的unsigned int表现为负数

0 c printf undefined-behavior

我不明白为什么unsigned int的输出对于以下代码是负的.就像一个签名的int.

  uint32_t yyy=1<<31;
  printf("%d\n",yyy);
Run Code Online (Sandbox Code Playgroud)

输出是:

-2147483648

是的-2^31.

hmj*_*mjd 6

%d期望a int而不是an 的格式说明符unsigned int,因此代码具有未定义的行为.从C99标准部分7.19.6.1 fprintf函数:

如果任何参数不是相应转换规范的正确类型,则行为未定义.

使用%u为unsigned int:

uint32_t yyy=1u<<31;
printf("%u\n",yyy);
Run Code Online (Sandbox Code Playgroud)

输出:

2147483648