当整数超过其限制时会发生什么?输出是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();
}
答案 0 :(得分:3)
该程序将具有未定义的行为。
您提供的条件是非终止。这是一个循环,其中条件永远不会以明确的方式终止。
你会继续乘法,然后一旦它会溢出。然后,如果您在n
或<=3
中收到否定结果,那么它就会停止。同时res
也溢出了。因此,您无法确定此程序的行为方式。我们无法确定结果会是什么。
答案 1 :(得分:1)
行为未定义 - 您不应该依赖任何特定的行为。 int
溢出的常见表现是:
Wraparound ,1 + INT_MAX
变为INT_MIN
。这就是我遇到的每台Windows PC都能做到的。该操作产生的位模式与unsigned
表亲完全匹配。
钳位,1 + INT_MAX
变为INT_MAX
。我上次在20世纪90年代运行UNIX变体的机器上(签名幅度 int
)观察到这一点。