【发布时间】:2017-09-27 10:47:55
【问题描述】:
我有一小段代码,但我无法理解可能的输出是什么?
int main()
{
unsigned int i=65000;
while ( i++ != 0 );
printf("%d",i);
return 0;
}
我可以感觉到后增量在循环中发挥着重要作用,但我无法想象它。在达到最高正值后,无符号整数在 while 循环中的行为是否不同?最后,while循环后分号的目的是什么?
【问题讨论】:
-
无符号整数溢出is defined in C,基本上是环绕。
-
编译运行?
-
@InderRSingh 无符号类型没有符号位
-
@InderRSingh 你把我的名字弄错了,尽管它是自动完成的,无论如何我认为我读得很清楚——也许你的 cmets 不清楚。没有符号位,所以它与这里发生的事情无关。当然,unsigned int 可以的最高位是 1。
-
@InderRSingh:你的 cmets 没有意义。正如哈罗德所写,无符号整数没有符号位。您可能会将它们与具有符号位的正符号整数混淆,但这不一定是存储单元中的最高位。有符号整数溢出也是调用未定义行为的经典方法之一。这与 Linux 操作系统完全无关。
标签: c while-loop unsigned-integer post-increment