我有一小段代码,但我无法理解可能的输出是什么?
int main()
{
unsigned int i=65000;
while ( i++ != 0 );
printf("%d",i);
return 0;
}
我可以感觉到后增量在循环中发挥着重要作用,但我无法将其可视化。在达到最高正值后,无符号整数在 while 循环中的行为是否有所不同?最后,while 循环后面的分号的作用是什么?
最佳答案
定义了无符号整数溢出(请参阅 Why is unsigned integer overflow defined behavior but signed integer overflow isn't? ),并且此代码可能会终止(可能需要一些时间:请参阅下文)。
但是,int
的大小因平台而异。如果它是 16 位(一些旧的编译器),它将很快达到最大值 65535 并终止于换行。然而,如果它是 32 位(GCC 和许多),则需要一段时间才能溢出。它也可以被优化,因为它没有副作用:见下文。
while
语句后面的分号终止表达式,这意味着循环不执行任何操作,并允许优化 while
。
最后,输出为1
。
关于c - unsigned int 在 while 循环中的表现如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43695072/