整数变量是否可以使用以下C代码实现值-1 -
main()
{
int n=0;
while(n++ != -1){
printf("\n%d",n);
}
}
答案 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
。