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

时间:2017-12-29 06:56:57

标签: objective-c c arrays data-structures types

  

当整数超过其限制时会发生什么?输出是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();
}

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

  1. Wraparound 1 + INT_MAX变为INT_MIN。这就是我遇到的每台Windows PC都能做到的。该操作产生的位模式与unsigned表亲完全匹配。

  2. 钳位1 + INT_MAX变为INT_MAX。我上次在20世纪90年代运行UNIX变体的机器上(签名幅度 int)观察到这一点。