c - unsigned int 在 while 循环中的表现如何?

标签 c while-loop unsigned-integer post-increment

我有一小段代码,但我无法理解可能的输出是什么?

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/

相关文章:

javascript - WinJS 中的异步问题

c++ - 依赖从任何数字类型(unsigned、int、...)到 double 的隐式提升是否安全?

c - RSA_public_crypt 返回 -1 并且无法解密,带填充的 RSA 2048 位用于加密和解密文件

c++ - 快速数学导致对 `__pow_finite' 的 undefined reference

c - 在结构中打印 Int 打印地址

PHP与MySQL对比数据

c++ - 简单 while 循环的问题

mysql - MySQL中的zerofill有什么好处?

c - 在C中添加unsigned long和int

c - `__value` 是 gcc 扩展吗?如果是,它有什么作用?它有等效的 VC++ 吗?