大家好,欢迎来到IT知识分享网。
二、C语言的数据类型
3、实型数据
实型数据简称实数,在 C 语言中称为浮点数(带小数部分的数)
1)实型常量的两种表示形式
(1)十进制数表示形式 0.12、3.14159
(2)指数表示形式:
指数表示形式不太常用,但要有所了解,其中字母E可以大写也可小写。
2)实型变量的分类
C 语言中,实型变量分为单精度和双精度两种类型。
(1)float:单精度变量
(2)double:双精度变量
3)实型变量的定义
上面两行代码有什么区别?float型变量一般在内存中占 4 字节, double 型变量一般在内存中占 8 字节,这意味着double 型变量所能保存的数据范围比float 型变量所能保存的数据范围大得多,并且精度高得多(精度后面会详细解释)
浮点数在内存中都是以指数形式存储的,所以能够存储的数据范围大到超乎想象
(1)单精度float: 取值范围为(1 .17549e-038) ~ (3.40282e+038)
(2)双精度 double:取值范围为 (2. 22507e-308)~ (1.7976ge+308)
如何区分float 和 double这两种浮点类型实数?它们的精度不同,float类型实数提供 7 位有效数字(考虑到四舍五入问题,保守算 6 位), double类型实数提供 15-16 位有效数字(考虑到四舍五入问题,保守算15 位),到底多少位有效数字 ,随机器系统而异。
有效数字是什么意思?如数字 12345.678,如果精度是 1 位有效数字,则实际只能存储为10000.0,也就是说,只能把最高位这个值存下,其余位全部都是0
如果精度是 2 位有效数字,则存储为 12000.0 ,也就是能存下最高的两位数值
如果精度是 3 位有效数字,则存储为 12300.0 ,也就是能存下最高的三位数值
如果精度是 7 位有效数字 ,则存储为 12345. 67X,X 表示该位置的数字值并不确定
再看看数字0.1234,如果精度是 1 位有效数字,则存储的可能为 0.1XXXXX,如果精度是2位有效数字,则存储的可能是 0.12XXXX,以此类推
4)调试
调试对于日后顺利进行程序开发非常作用,必须掌握好调试的方法。
例:
float 的精度是7位有效数字 ,下面的有效数是7位吗?
efg的值显示为1.E+9,值展开后为 ,与原数字.1234 比较,小数点左侧损失了3位,898变成了940,小数点后的4位1234全部丢失。
例:
受printf输出函数中的%f格式符所限,所以两条 printf语句输出结果都是 12. ,不同版本开发工具结果可能会略有差异。
aaa的值是12.
bbb的值是12.
上面的结果明显看到,double 数据类型比float数据类型精度高很多,因为double数据类型能保存的有效位数比float 数据类型多得多。
例:
通过断点,查看bb的值,为什么不是0.51,而是0.?
当把一个十进制数值赋给一个实型变量时,计算机会把这个十进制数转换成二进制数保存,当程序执行流程,停在断点上,用鼠标查看这个变量值时,计算机实际上是把它保存的二进制数再转换成十进制数显示出来。
步骤是十进制 → 二进制 → 十进制,在这个过程中存在着一些除法运算,这些除法运算因无法整除的原因,会导致从二进制转换回十进制数时丢失精度。
例如日常生活中用10除以3,那么结果是3. 33333…,永远无法整除,是一样的道理。
受printf输出函数中的%f格式符所限,所以 printf语句输出bb的结果是0.。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/144335.html