在C语言中溢出short int

时间:2015-11-03 09:16:36

标签: c

我试图创建一个在C中显示短int溢出的程序。在我的程序中输入两个short int并添加它们。如果加法优于32767,我们有一个负溢出,如果加法不如-32678,我们有一个正溢出。

现在我的问题是我的程序在使用if时拒绝遵守任何条件。但是当我使用do while我的程序时,我认为我同时尊重这两个条件。

short int n1, n2, somme;
printf("Enter the first number: ");
scanf("%hi", &n1);
printf("enter the second number : ");

scanf("%hi", &n2);

somme= n1 + n2;
    do
    {
    printf("negative overflow\n");
    }while (somme>32767);
    do
    {
    printf("negative overflow\n");
    }while ( somme<-32768);

printf("the result is %hi", somme);

抱歉我的英文。感谢阅读,请帮忙。

1 个答案:

答案 0 :(得分:1)

我在您的代码中进行了一些更改,以演示您尝试执行的操作,

#include<stdio.h>
int main(){
    short int n1, n2, somme;
    printf("Enter the first number: ");
    scanf("%hi", &n1);
    printf("Enter the second number : ");
    scanf("%hi", &n2);

    somme = n1 + n2;
    if( (n1 + n2) > 32767)
        printf("negative overflow\n");
    else if ( (n1 + n2) < -32768)
        printf("positive overflow\n");

    printf("int addition result is %d\n", n1 + n2);
    printf("short addition result is %hi\n", somme);
    return 0;
}

这是输出,

Enter the first number: -20000
Enter the second number : -20000
positive overflow
int addition result is -40000
short addition result is 25536
-----------------------------
Enter the first number: 20000
Enter the second number : 20000
negative overflow
int addition result is 40000
short addition result is -25536

所以,你的代码出了什么问题,

  • 您正在使用do...while来检查条件。使用if-else
  • 您将总和存储在short中,并将其与-3276832767进行比较。您试图通过将其与超出其可容纳的值范围的值进行比较来检查您的总和是否溢出。 Jérôme Leducq中的answer也解释了这一点。