【发布时间】:2014-02-04 20:51:03
【问题描述】:
有人和我谈论 C 中的环绕 (0xffff + 0x0001 = 0x0000),这导致我遇到以下情况:
int main() {
unsigned int a;
for (a = 0; a > -1; a++)
printf("%d\n", a);
return 0;
}
使用 GCC 编译,该程序退出而不运行循环,我认为这是因为 -1 被隐式转换为 0xffff。将int 切换到long 时也会发生同样的情况。但是,当切换到char 时,程序会无限期地运行。我希望由于int 没有运行循环,char 也不会。有人能解释一下编译器在这种情况下执行什么样的隐式转换,它是在 C 标准的某个版本中定义的,还是依赖于编译器的?
【问题讨论】:
标签: c casting comparison implicit-conversion