今天在写程序的时候发现了一个相当隐蔽的错误,查了好久才找到了这个缺陷,就是当我们在将一个负数变成正数的时候,一定要注意防止数据溢出。比如定义一个char型的变量a。。。。。。。。如下所示:
char a;
if (a<0)
{
a=-a;
}
printf("%d\n");
这几条语句在一般情况下是不会出问题的,比如我们使变量a=-10,输出为10;然而当a=-128时,问题就出现了,此时输出的仍然是-128(这是我在VC6.0上的测试结果),分析其中的原因才发现char型的数据的取值范围是-128~+127 所以当a=-128时a=-a;发生了溢出。。。。。。。。。。。。。。。。