这是代码:
这是输出结果。
#include <stdio.h>
int main()
{
unsigned int i = 0xFFFFFFFF;
if (i == -1)
printf("signed variable\n");
else
printf("unsigned variable\n");
return 0;
}
这是输出结果。
signed variable
即使声明为无符号,为什么i
的值为-1
?这与隐式类型转换有关吗?
这是构建环境:
Ubuntu 14.04, GCC 4.8.2
i == -1
时,数值-1
会被转换为无符号整型,然后进行比较。在这种情况下,-1
变成了0xFFFFFFFF
,并且匹配了i
。 - lurker