当整数超过其限制时会发生什么?输出是3595,它将如何来?它是2字节类型?
#include<stdio.h>
#include<conio.h>
void main()
{
int n=12,res=1;
clrscr();
while(n>3)
{
n+=3;
res*=3;
}
printf("%d",n*res);
getch();
}
该程序将具有未定义的行为。
你提供的条件是非终止的。这是一个循环,其中条件永远不会以明确定义的方式终止。
你会继续乘法,然后一旦它会溢出。然后,如果你在n
或<=3
得到负面结果,那么它将停止。同时res
也溢出了。因此,您无法确定此程序的行为方式。我们无法确定结果如何。
行为未定义 - 您不应该依赖任何特定的行为。 int
溢出的常见表现是:
1 + INT_MAX
成为INT_MIN
。这就是我遇到的每台Windows PC都能做到的。该操作产生的位模式与unsigned
表亲完全匹配。1 + INT_MAX
成为INT_MAX
。我上次在20世纪90年代运行UNIX变体的机器(带有签名量级int
)上观察到了这一点。