由于计算机中类型的长度限制,会造成特殊的错误,比如:两个正数相加后的结果为负数,一般把这种计算错误成为溢出(overflow)错误,如代码 3 - 2 所示,将其复制到在线编辑器中并执行后,会发现溢出错误。在此强调,因为 printf 不同的输出控制符会对结果产生影响,是因为在 printf 中会做类型转换,并不是说计算结果的溢出被修正了。
#include <stdio.h>
int main(){
short left = 32776;
short right = 5;
printf("1: %hd + %hd = %hd\n", left,right, left + right);
printf("2: %d + %d = %d\n", left, right, left + right);
return 0;
}
类似的还有负数加负数,结果却为正数的情况,作为一个小练习留给大家。提示:修改 left、right 值即可,其他代码无须修改。
第二个思考:如何正确的求出 left 与 right 的中间值 呢?
#include <stdio.h>
int main(){
short left = 17;
short right = 5;
int a = (left + right)/2;
printf("1: %hd + %hd = %hd\n", left,right, left + right);
printf("2: %d + %d = %d\n", left, right, left + right);
printf("a = %d\n", a);
return 0;
}
学习总结:编程时一定注意输入法的状态。