添加或乘以整数时超出其限制会发生什么

问题描述 投票:-3回答:2

当整数超过其限制时会发生什么?输出是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();
}
objective-c c arrays data-structures types
2个回答
3
投票

该程序将具有未定义的行为。

你提供的条件是非终止的。这是一个循环,其中条件永远不会以明确定义的方式终止。

你会继续乘法,然后一旦它会溢出。然后,如果你在n<=3得到负面结果,那么它将停止。同时res也溢出了。因此,您无法确定此程序的行为方式。我们无法确定结果如何。


1
投票

行为未定义 - 您不应该依赖任何特定的行为。 int溢出的常见表现是:

  1. 环绕式使1 + INT_MAX成为INT_MIN。这就是我遇到的每台Windows PC都能做到的。该操作产生的位模式与unsigned表亲完全匹配。
  2. 夹紧使1 + INT_MAX成为INT_MAX。我上次在20世纪90年代运行UNIX变体的机器(带有签名量级int)上观察到了这一点。
© www.soinside.com 2019 - 2024. All rights reserved.