问题描述:
1、数据类型内存问题
2、数据类型转化问题
问题解决:
1、数据类型的内存问题
首先我先把C语言基本数据类型的内存大小列在下方
数据类型 | 所占字节数 |
---|---|
char | 1 |
short | 2 |
int float | 4 |
double | 8 |
一个字节代表计算机8位二进制,所以读者自行计算各数据类型的取值范围(内存问题的关键所在)
数据溢出是数据内存的主要问题,下面通过实例来叙述数据溢出
计算自然数立方和,直到立方和大于等于1000000为止,统计累加的项数
#include<stdio.h>
main(){
short i,sum = 0;
for(i = 1;sum < 1000000;i++){
sum = sum + i*i*i;
}
printf("count = %d\n",i);
}
执行结果如下图:
这个结果代表是在循环中不断的执行,也就是死循环。其实正确的结果是输出count=45,为什么?
这就是因为在申请sum空间时为short类型而short类型为2个字节,取值范围为(-327268~32767),sum发生了数据溢出,导致sum永远也达不到1000000,所以死循环;
所以预估计数据的大小来确定数据的类型至关重要
2、数据类型的转化
类型的转化在科恩都有介绍,这里注意提醒除法时的类型,当int型做除法时,得到的也是int类型。因此当想要计算我们数学中的除法时,要记得将整形int转化为浮点型数据。