第二章 数据类型、运算符与表达式(四)

第二章 数据类型、运算符与表达式(四)本文详细介绍了 C 语言中的实型数据类型 包括浮点数的十进制和指数表示 以及单精度 float 和双精度 double 的区别

大家好,欢迎来到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

(0)
上一篇 2025-04-27 15:26
下一篇 2025-04-27 15:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信