我不明白为什么unsigned int的输出对于以下代码是负的.就像一个签名的int.
uint32_t yyy=1<<31;
printf("%d\n",yyy);
Run Code Online (Sandbox Code Playgroud)
输出是:
-2147483648
是的-2^31.
%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