【发布时间】:2013-05-24 15:11:07
【问题描述】:
我不明白为什么 unsigned int 的输出对于以下代码是负数。 就像一个有符号的 int。
uint32_t yyy=1<<31;
printf("%d\n",yyy);
输出是:
-2147483648
这是-2^31。
【问题讨论】:
-
试试
printf("%u\n",yyy); -
即使在您调用
printf之前,如果int在您的 C 实现中具有 32 位,则此代码具有未定义的行为。1<<31的值溢出int。您应该使用1u<<31,以便它移动unsigned int。
标签: c printf undefined-behavior