正值递增时整数如何以负数结尾?

-2 c++

我只是写这段代码,但我不知道它是如何工作的。

为什么价值k会是负数?怎么样?

#include<iostream>
using namespace std;
int main()
{
    int k=1,j=0;
    while(k>j)
    {
        j=k;
        k++;
    }
    cout<<j<<"\n"<<k;
}
Run Code Online (Sandbox Code Playgroud)

它显示了整数的范围

Mic*_*ler 6

int范围有限。有时会k++超出此限制。此后,行为是不确定的,任何事情都会发生。

如果编译器非常保守,则它将简单地溢出到负值(特别是在int2的补码几乎无处不在的情况下),但这不能保证。在这种情况下,while循环将终止。

查看gcc在进行优化和不进行优化时的作用。根据标准,这两种行为都是合法的,因为未定义已签名的溢出行为。

使用优化(无限循环):

main:
.L2:
        jmp     .L2
Run Code Online (Sandbox Code Playgroud)

未经优化:打印:

2147483647
-2147483648
Run Code Online (Sandbox Code Playgroud)

同样,不仅以上两种行为,任何事情都可能发生。签名溢出未定义。