使用以下C代码可以使整数变量达到值-1吗?

时间:2014-06-16 11:00:01

标签: c int

整数变量是否可以使用以下C代码实现值-1 -

main()
{
    int n=0;
    while(n++ != -1){
        printf("\n%d",n);
    }
}

3 个答案:

答案 0 :(得分:8)

是的,确实如此。在某个时刻,变量将溢出,可能变为负数。但请注意,签名溢出是未定义的行为,因此无法知道将发生什么,这就是为什么应该避免这样的代码的原因。

答案 1 :(得分:5)

这有一个理论和实践部分:

理论上,将一个加到整数的最大值将导致未定义的行为。这可能是任何事情。粉红色的大象可能正在从天而降。

实际上,即使对于编译器供应商来说,粉红色的大象也很难实现,如果你在一个最大的值范围内添加一个,它们中的大多数只会产生最小的值范围。这意味着 max + 1 将导致 min

这样,一旦您从 0 计算到 max ,请添加一个以达到 min 并计算到 -1 < / em>再次,是的,经过一段时间的练习,你的整数将变为-1。

答案 2 :(得分:2)

默认情况下,int变量在C中为signed。因此,在这种情况下为signed integer overflow invoke undefined behavior n可能会或可能不会成为-1 但是,如果您想实现这一目标,请将n声明为unsigned int。由于整数溢出,您将获得-1