- 前言
- 一、数据类型的精度
- 二、程序实例
- 总结
前言
数据类型规定了数据的存储空间,因此计算机中不能存储无穷大和无穷小的数,每种数据类型的数据可以表示一个范围或精度内的数据,如果超出了,就会发生数据溢出,导致无法显示运算结果。
一、数据类型的精度
C语言一共提供了6种基本的整型数据类型,有int、short、long,其中每一种加上unsigned构成无符号型。系统分别给相应的变量预留空间分别为2、2、4个字节,每个字节有八位二进制位。有符号整型变量最大只能表示32767;无符号整型变量最大只能表示65535。
C语言常用的实型常量有float和double型。系统为其变量预留的空间分别是4、8个字节。单精度实型数据有效位数是6~7位,双精度实型数据有效数是15 ~16位。
C语言中只含有一个字符的类型char,系统预留的存储空间位1个字节,可以表示0~255范围内的数据,超出范围溢出。
代码如下:
#includevoid main() { int a0,b0; unsigned u1,u2; float a1,a2,b2; double b1; u1=0; a0=32767; b0=a0+1; u2=u1-1; a1=33333.33333; a2=123456.789e5; b2=a2+20; b1=33333.33333333333333333; printf("%d,%dn",a0,b0); printf("%u,%un",u1,u2); printf("%fn%fn",a1,b1); printf("%fn",a2); printf("%fn",b2); }
运行结果:
结果分析:
- 可以看到整型变量a0定义为32767,32767是整型变量的最大限度,当将a0+1赋值给b0,得到b0的值是-32768而不是32768出现了运算错误。
- u1,u2均位无符号变量,当给u1设为0值时,u2设为u1-1得到的u2的值不是-1而是65535,可见无符号整型数据无法进行负数类的运算。
- 单精度和双精度可以表示的数据的有效数字位6~7和15 ~16位,当赋值的数字超过了范围,输出的数据会被截取。
- a2值相当大,所以当将a2的值加20 赋值给b2时,可以看到a2和b2的值是一样的,不是没有运算,是因为20 对于a2的值比较太小可以忽略不计。
总结
以上就是今天要讲的内容,本文仅仅简单介绍C语言中数据溢出的实例。



