C 无符号int如何处理while循环?

C 无符号int如何处理while循环?,c,while-loop,unsigned-integer,post-increment,C,While Loop,Unsigned Integer,Post Increment,我有一小段代码,我很难理解输出可能是什么 int main() { unsigned int i=65000; while ( i++ != 0 ); printf("%d",i); return 0; } 我能感觉到后增量在循环中起着主要作用,但我无法想象它。达到最大正值后,无符号整数在while循环中的行为是否有所不同?最后,while循环后面的分号的用途是什么 定义了无符号整数溢出(请参阅),此代码可能会终止(可能需要时间:请参阅下文) 但是,int的大小

我有一小段代码,我很难理解输出可能是什么

int main()
{
    unsigned int i=65000;
    while ( i++ != 0 );
    printf("%d",i);
    return 0;
}

我能感觉到后增量在循环中起着主要作用,但我无法想象它。达到最大正值后,无符号整数在while循环中的行为是否有所不同?最后,while循环后面的分号的用途是什么

定义了无符号整数溢出(请参阅),此代码可能会终止(可能需要时间:请参阅下文)

但是,
int
的大小因平台而异。如果是16位(一些旧的编译器),它将很快达到最大值65535,并在换行时终止。然而,如果它是32位的(GCC和许多),则需要一段时间才能使其溢出。它也可以优化,因为它没有副作用:见下文

while
语句后面的分号终止表达式,这意味着循环不执行任何操作,并允许对
while
进行优化


最后,输出将是
1

无符号整数溢出,本质上是环绕。编译并运行它?@indersingh无符号类型没有符号bits@InderRSingh你把我的名字弄错了,尽管它是自动完成的,不管怎样,我认为我读得很清楚——也许你的评论不清楚。没有符号位,所以它与这里发生的事情无关。当然,无符号int的最高有效位可以是1。@indersingh:您的注释没有意义。正如哈罗德所写,无符号整数没有符号位。您可能会将其与具有符号位的正有符号整数混淆,但这不一定是存储单元中的最高位。此外,有符号整数流是调用未定义行为的经典方法之一。这与Linux操作系统完全无关。我认为输出值是1(试试看),因为
I
有一个后缀增量。更正了这些问题。看这里,他们说输出是1。尝试在他们的IDE上运行,但上面写着:“超过了5秒的时间限制”。当然,如果你允许公众运行程序,你会对这些程序设置时间限制。您不希望人们能够使您的系统崩溃。因此,程序没有完成,因为它已用完time@f__society使用32位
int
在我的电脑上运行您的程序大约需要7秒钟。