文章目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- 前言
- 一、数据类型有多少种?
- 二、测试数据类型占用的内存和4种浮点型数据的计算精度
- 1.占用内存
- 2.4种浮点数的精度比较
- 总结
前言
C语言中了解各个数据类型的储存大小也是非常重要的,可以避免数据溢出的问题
一、数据类型共有多少种?
数据类型一共有12种,其中int8种,float2种,double2种。
二、测试数据类型占用的内存和4种浮点型数据的计算精度 1.占用内存代码如下(示例):
#includeint main() { int a; short int b; long int c; long long int d; unsigned int e; unsigned short int f; unsigned long int g; unsigned long long int h; float c1,c2; long float d1,d2; double a1,a2; long double b1,b2; printf("int:%dn", sizeof(a)); printf("short int:%dn", sizeof(b)); printf("long int:%dn", sizeof(c)); printf("long long int:%dn", sizeof(d)); printf("unsigned int:%dn", sizeof(e)); printf("unsigned short int:%dn", sizeof(f)); printf("unsigned long int:%dn", sizeof(g)); printf("unsigned long long int:%dn", sizeof(h)); printf("float:%dn", sizeof(c1)); printf("long float:%dn", sizeof(d1)); printf("double:%dn", sizeof(a1)); printf("long double : % dn", sizeof(a2));
测试结果:
可见,short int 占有更少的内存,在比较小的数据计算时可以节省内存,缺点是可储存的数范围小大概为:
2^15=3,2768约等于3.2万
而最大储存范围的应该是unsigned long long int 储存范围为:
2^64-1=1844,6744,0737,0955,1614约等于1844兆
计算方法:
上图显示的是数据类型占用的字节数,通常一个字节为8位比特,也就是8个储存二进制位的地方,例如int:4字节*8比特=32位,去掉一个符号位,剩31位,可以储存最大为2^31-1的数,减一是因为0也是一个数,也占一个位置。
2.4种浮点数的精度比较其实long float,long double已经很少用到了,今天偶然间才发现还有long float这种类型,不过还是一起比较比较。
计算1/3的值
代码如下(接在上个图片之后):
c1 = d1 = a1 = b1 = 1;
a2 = b2 = c2 = d2 = 3;
printf("精度比较:n");
printf("float: %.20lfn", c1 / c2);
printf("long float: %.20lfn", d1 / d2);
printf("double: %.20lfn", a1 / a2);
printf("long double:%.20lfn", b1 / b2);
测试结果:
可见,float在6位以后就不精确了,而long float,double,long double精度相同,而且统一都占8位,我暂时找不出什么区别(可能三个根本上就是一样的,所以才很少见到 long float和long double,都让double代替了)
总结
在C语言中,数据类型中储存数值最大的为unsigned long long int 约为1844兆,大于这个数的可能就要用更复杂的方法了(好像可以用数组来存储二进制位,我不怎么了解)



