前言
狄泰软件唐老师的个人学习笔记
1、浮点数
浮点数在内存的存储方式:符 位,指数,尾数
类型 | 符 位 | 指数 | 尾数 |
---|---|---|---|
float | 1位(31) | 8位(23~30) | 23位(0~22) |
double | 1位(63) | 11位(52~62) | 52位(0~51) |
float 和 double 的表示方法相同,只是数值范围和精度不同 |
1.1浮点数的转换:
- 将浮点数转换为二进制
- 用科学计数法表示二进制浮点数
- 计算指数偏移后的值,偏移量与类型有关,float是127,double是1023
举例
实数 8.25 在内存中的 float 表示:
-
8.25 的二进制表示:1000.01
-
科学计数法表示为:1.00001* ( 2^3)
- 符 位:0 (正数)
- 指数:127(偏移量) + 3 = 130 = 1000 0010
- 小数:00001
-
因此,内存中 8.25 的 float 表示为:
0(符 位) 1000 0010(指数) 0000 1000 0000 0000 0000 000 (小数) = 0x4104 0000
实验:8.25在内存中的表示
2、int 与 float 的范围问题

int 和 float 都占四个字节,为啥float的范围更大/h4>
- float 能表示的具体数字的个数与 int 相同
- 因此,float 是不连续的,存在间隙,(相邻内存之间不连续,小数是无穷的,连续了,内存多少也不够啊)
- 因此,float是一种近似的表示法,不够精确
- 由于内存表示法相对复杂,float 的运算速度比 int 慢很多
- double 与 float 具有相同的内存表示法,因此double也不精确,而double 的内存更多,相比较而言,double 更精确
实验:验证 float 的不精确
注:float 的不精确性导致了他不能直接与 0 直接比较
这个判断条件可能永远为假,float是不精确的表示,可能初始化为0,但是内存不是0,直接等于0 ,可能永远不成立,if 内的条件可以是一个范围
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览113356 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!