千家信息网

什么是浮点数

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要讲解了"什么是浮点数",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"什么是浮点数"吧!1 前言我们在学习 C 语言时,通常认为浮点数和小数是
千家信息网最后更新 2026年11月03日什么是浮点数

这篇文章主要讲解了"什么是浮点数",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"什么是浮点数"吧!

1 前言

我们在学习 C 语言时,通常认为浮点数和小数是等价的,并没有严格区分它们的概念,这也并没有影响到我们的学习,原因就是浮点数和小数是绑定在一起的,只有小数才使用浮点格式来存储。

其实,整数和小数可以都使用定点格式来存储,也可以都使用浮点格式来存储,但实际情况却是,C 语言使用定点格式存储整数,使用浮点格式存储小数,这是在 "数值范围" 和 "数值精度" 两项重要指标之间追求平衡的结果。

2 什么是浮点数?

浮点型简单讲就是实数的意思。浮点数在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是 2)的整数次幂得到,这种表示方法类似于基数为 10 的科学记数法。

3 浮点数在内存中的存储

首先明确一点,无论是整型、浮点型还是字符等等数据类型在计算机底层都是以二进制的方式存储的。

浮点数在内存中的存储和整数不同,因为整数都可以转换为一一对应的二进制数据。而浮点数的存储是由符号位 (sign) + 指数位 (exponent) + 小数位 (fraction) 组成。

类型  符号位 指数  尾数 Float   1位(第31位)    8位(第23~30位) 23位(第0~22位) Double  1位(第63位)    11位(第52~62位)    52位(第0~51位)

int 和 float 同样占据四个字节的内存,但是 float 所能表示的最大值比 int 大得多,其根本原因是浮点数在内存中是以指数的方式存储。

浮点数转换到内存中存储的步骤分为如下三步:

  • 将浮点数转换成二进制

  • 用科学计数法表示二进制浮点数

  • 计算指数偏移后的值

对于第3点:计算指数时需要加上偏移量(后面有介绍为什么使用偏移量),而偏移量的值与浮点数的类型有关( float 偏移量值为 127 ,double 偏移量值为 1023)。比方对于指数 6,float 与 double 类型偏移后的值分别为:

  • float : 127 + 6 = 133

  • double:1023 + 6 = 1029

4 实例

浮点数19.625用float是如何存储的:

  • 将浮点数转换成二进制:10011.101(将 19.625 整数部分采用除 2 取余,小数部分采用乘 2 取整法);

  • 用科学计数法表示二进制浮点数:1.0011101*2^4;

  • 计算指数偏移后的值:127 + 4 = 131 (10000011);

  • 拼接综上所述,float 类型的 19.625 在内存中的值为:0 - 10000011 - 001 1101 0000 0000 0000 0000。

5 float与double范围和精度

范围

float和double的范围是由指数的位数来决定的。(因为表示的时候都是1.x * 2^Y的形式,所以忽略了1.x的效果,直接取指数表示浮点数的范围)

  • float:

1bit(符号位) 8bits(指数位) 23bits(尾数位)

  • double:

1bit(符号位) 11bits(指数位) 52bits(尾数位)

于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。

其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。

float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;

double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。

精度

float和double的精度是由尾数的位数来决定的,尾数越多能表示的小数点后面有效数字就越多,因此精度就越高。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的"1",由于它是不变的,故不能对精度造成影响。

float:2^23 = 8388608,一共七位,这意味着最多能有 7 位有效数字,但绝对能保证的为 6 位,也即float的精度为 6~7 位有效数字;

double:2^52 = 4503599627370496,一共 16 位,同理,double的精度为 15~16 位。

6 解剖:为什么要用偏移量的方式来计算指数?

如果不采用偏移量的方式:

8 位 2 进制数表示的有符号数范围有两个区间:0000 0000~0111 1111和1000 0000~1111 1111,分别为0~+127和-127~0。

大家看到这里的问题了吧,有两个 0 ,一个正 0 和一个负 0。

如果采用偏移量的方式:

127 转化为二进制是:0111 1111

那么

  • 当我们要表示 -127,则有127-127即0111 1111 - 0111 1111 = 0000 0000

  • 当我们要表示 -126,则有127-126即0111 1111 - 0111 1110 = 0000 0001

  • 当我们要表示 -2,则有127-2即0111 1111 - 0000 0010 = 0111 1101

  • 当我们要表示 -1,则有127-1即0111 1111 - 0000 0001 = 0111 1110

  • 当我们要表示 0,则有0+127即0000 0000 + 0111 1111 = 0111 1111

  • 当我们要表示 1,则有1+127即0000 0001 + 0111 1111 = 1000 0000

  • 当我们要表示 2,则有1+127即0000 0010 + 0111 1111 = 1000 0001

  • 当我们要表示128,则有128+127即1000 0000 + 0111 1111 = 1111 1111

由上面的例子,我们可以得出规律,采用移位存储技术,我们可以使用 8 位二进制来表示从-127~+128共计 127 个负数+零(0)+ 128 个正数总共 256 个数,看来使用移位存储既没有 +0 和 -0 的问题,又能充分使用新生成的8位二进制数最大限度的表示单精度浮点数的幂指数,是非常合理的。

感谢各位的阅读,以上就是"什么是浮点数"的内容了,经过本文的学习后,相信大家对什么是浮点数这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

点数 存储 指数 范围 偏移 二进制 小数 精度 内存 整数 数位 浮点 方式 格式 类型 学习 尾数 科学 符号 最大 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技创新与互联网经济 互联网巨头科技公司 善班互联网科技 以房互联网科技 齐家互联网科技 狮子座互联网科技有限公司 互联网高科技股票 互联网科技生活的内容 广州慧亚互联网科技怎么样 北京华百购互联网科技有限公司 金融科技与互联网金融相同和不同 成都铂石互联网科技做什么的 亳州好赞互联网科技有限公司 内蒙古九一互联网科技 四川慕妮娅互联网科技有限公司 恒生互联网科技业指数调整周期 山东子淼互联网科技有限公司 皮皮虾互联网科技有限公司 银川新华互联网科技学校是国营吗 云南互联网科技学费 互联网的科技 科技赋能下的互联网金融 西安互联网科技公司 济南和联互联网科技有限公司 字节跳动和互联网科技 贵州叶脉互联网科技有限公司所属行业 互联网还是高科技吗 广西互联网科技孵化中心 上海创道互联网络科技有限公司 优雇互联网科技有限公司
0