3、浮点数

前言

狄泰软件唐老师的个人学习笔记

1、浮点数

浮点数在内存的存储方式:符 位,指数,尾数

类型 符 位 指数 尾数
float 1位(31) 8位(23~30) 23位(0~22)
double 1位(63) 11位(52~62) 52位(0~51)
float 和 double 的表示方法相同,只是数值范围和精度不同

1.1浮点数的转换:

  1. 将浮点数转换为二进制
  2. 用科学计数法表示二进制浮点数
  3. 计算指数偏移后的值,偏移量与类型有关,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 的范围问题

3、浮点数

int 和 float 都占四个字节,为啥float的范围更大/h4>
  1. float 能表示的具体数字的个数与 int 相同
  2. 因此,float 是不连续的,存在间隙,(相邻内存之间不连续,小数是无穷的,连续了,内存多少也不够啊)
  3. 因此,float是一种近似的表示法,不够精确
  4. 由于内存表示法相对复杂,float 的运算速度比 int 慢很多
  5. double 与 float 具有相同的内存表示法,因此double也不精确,而double 的内存更多,相比较而言,double 更精确

实验:验证 float 的不精确

注:float 的不精确性导致了他不能直接与 0 直接比较

这个判断条件可能永远为假,float是不精确的表示,可能初始化为0,但是内存不是0,直接等于0 ,可能永远不成立,if 内的条件可以是一个范围

文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览113356 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年3月2日
下一篇 2022年3月2日

相关推荐