【发布时间】:2015-04-20 13:06:18
【问题描述】:
我已经在带有 Turbo C/C++ 编辑器的 32 位 Windows 7 操作系统上执行了这个程序。
#include<stdio.h>
#include<conio.h>
void main()
{
int a,b,c,d,e;
clrscr();
a = 25000;
b = 10000;
c = a + b;
printf(" The value of c = %d\n", c );
d = 5000;
e = c - d;
printf(" The value of e is %d\n", e );
getch();
}
当我打印 c 时,我得到值 -30536,因为值 35000 超过了最大值。但是当我在表达式'e = c - d;'中使用相同的c时,我得到正确的值为 30000。 这怎么可能?
【问题讨论】:
-
溢出/lunderflow。顺便说一句,如果您真的想学习 C 或 C++,请使用甚至是半现代的编译器。
-
你对
25000 + 10000 = -30536很满意,那为什么不-30536 - 5000 = 30000呢? -
25000 + 10000的情况与-30536 - 5000相同 -
它没有存储 35000。它是 -30536。回归本源。你怎么能接受
25000 + 10000 = -30536? -
在标准 C 中,您的程序具有未定义的行为。你的编译器是古老的,你应该得到一个符合现代标准的编译器。并了解未定义的行为。
标签: c