为什么float只有四个字节,存储范围却大于有八个字节的long类型?

为什么float4个字节比long8个字节所表示的数值范围还大? 为什么float4个字节比long8个字节所表示的数值范围还大?这要从float型在计算机中的存储方式开始说了。 阅读详情

在Java语言中,我们知道基本数据类型包括数值型、字符型以及布尔型。其中数值型包括整数类型(byte、short、int、long)和浮点类型(float、double)。long型占用8个字节的存储空间,即64bit,最左边一位是符号位,0表示正,1表示负,其余23位存储数值,所以long型可以表示的数值范围为-263到263-1。这个很好理解,而float型占用4个字节,即32bit,所表示的数值范围为-3.403E38到3.403E38,这个数值范围是要大于long型所表示的数值范围的。为什么会这样呢?要搞懂这个问题,就先要明白float型是如何存储的。

float型的存储方式

为了方便说明,这里借用维基百科中【单精度浮点数】定义[1]中的一张图。

 

float型数的存储方式


其中,左边第一位为符号位,0表示正,1表示负。上图中sign为0,所以为正数。

中间8bit表示指数,但是这里和byte不同,byte型也是8bit,表示的数值范围是-27到27-1,即-128到127。这里exponent的8bit表示的则是-127到128。在IEEE 754(IEEE二进制浮点数算术标准)[2]中规定,在指数的实际值上要加上一个固定的值,目的是为了方便浮点数的计算,该固定值为2e-1-1,其中e表示存储指数的bit的长度。在单精度浮点数中,e的值为8,所以固定值是127。所以,exponent中存储的数值是0(-127+127)到255(128+127),共256个数。在上图中,指数部分存储的是01111100,转换为十进制是124,124减去127(加的固定值)即为实际指数值,即-3。

在小数部分中,最左侧省略了一个1,上图中的小数部分为01,其实就是1.01(二进制),转换为十进制就是1+2-2(这里看不懂的话去复习二进制小数转十进制)。
所以,最终上图所表示的数值为(-1)sign ×\times× fraction ×\times× 2exponent = (+1) ×\times× (1 + 2-2) ×\times× 2-3 = 0.15625。

不过还没有结束,关于浮点数其实还分为零、非规约形式,规约形式、无穷以及NaN,以4字节单精度浮点数为例,具体如下:

形式指数小数部分
零0(实际-127)0
非规约形式0(实际-126)大于0小于1
规约形式1到254(实际-126到127)大于等于1小于2
无穷255(实际128)非0
NaN255(实际128)非0

规约形式的浮点数就是指数大于0小于等于2e-2(e为8时值为254),fraction最高位省略了1。“规约”就是指用唯一确定的浮点形式去表示一个值。

如果指数部分的值为0(实际-126,为什么不是0-固定值127 = -127?因为IEEE 754规定非规约形式的浮点数的指数偏移值比规约形式的浮点数的指数偏移值小1),小数部分不为0,那么这个浮点数就是非规约形式的浮点数,这个时候最高位省略的就不是1了,而是0了,所以小数部分是大于0小于1的。所有的非规约浮点数比规约浮点数更加接近0。

下面列出了单精度浮点数各种极值的情况:

 

单精度浮点数各种极值情况


我们常说的float型的表示范围其实说的是单精度浮点数最大的规约数的范围。

为什么float4个字节比long8个字节所表示的数值范围还大?

回到这个问题,我想你已经有答案了。
就是float型它有指数部分,规约数的指数可以表示到2127,差不多是1038这么大。

再扯远一点,从信息论的角度看,我们有额外的信息(IEEE 754的编码格式规定)嵌入在了数值范围的表示中,即我们知道哪个是符号位,哪些是指数部分,哪些是小数部分,以及省略的最高位的1,所以float型32个bit才能存下这么多信息。

char类型、int类型、double类型、float类型、long在“计算机”内存中占多少个字节? 不同编译器,字节占位。 阅读详情

相关推荐

DIY便携式PEMF磁脉冲治疗仪:百元成本自制生物物理疗法设备

脉冲电磁场(PEMF)疗法是一种基于生物物理原理的非侵入性技术,它通过特定频率的电磁脉冲作用于细胞层面,影响细胞膜电位和离子通道活动,从而可能调节细胞代谢与功能。其技术价值在于提供了一种物理干预手段,在健康科技和生物黑客领域被探索用于放松、恢复等场景。实现PEMF的核心是通过信号发生与功率放大驱动电磁线圈产生可控磁场。本文以蓝牙音频模块和智能手机App为切入点,详细解析了如何利用低成本电子元件(如DFRobot XY-WRBT模块和漆包线线圈)构建一个可自定义频率的便携式PEMF设备,涵盖了从电路设计、线圈

weixin_31476015的博客 345

贝贝有疑:为什么float占4个字节,long占8个字节,float却比long要大呢?

问题描述: 为什么float占4个字节,long占8个字节,float却比long要大呢? 问题解答: 因为整数和小数,底层的二进制存储结构不同. 这么说可能有些抽象我们来看一下下面这条代码: System.out.println(Float.MAX_VALUE - Long.MAX_VALUE); 如果输出的值为正数,是不是就可以证明float大呢? 看运行结果确实是正数,所以float确实比l...

HappyMouse丨贝贝的博客 4758

从零到一:YT8512C PHY芯片在STM32F407上的LWIP移植实战与避坑指南

本文详细介绍了YT8512C PHY芯片在STM32F407平台上基于LWIP协议栈的移植实战,涵盖硬件连接、CubeMX配置、寄存器定制和调试技巧。重点解析了与主流PHY芯片的差异,提供了完整的避坑指南和优化建议,帮助开发者快速实现稳定可靠的嵌入式网络连接。

uber9的博客 538

为什么float类型4字节比long类型8字节的范围大

float比long类型的数据范围大。 float:4个字节 long:8个字节 为什么float的4个字节比long类型的8个字节的范围大? 因为整数与小数的底层存储有点不同。 相同点:它们都是用二进制存储的 不同点: 小数先转成二进制,然后处理,然后存储。 符号位 其中最左边的为符号位,0为正,1为负。 指数 接下来的E是指数,一共8位,也用二进制来表示。IEEE规定,在float类型中,用来计算指数的偏移量为127(即存贮指数时要在原基础上+127)。 尾数 最后的F是小数部分,尾数正是由这23位的小

tacot的博客 723

折叠式共源共栅放大器设计/备忘

w折叠式共源共栅基本结构如图

Czy1377004611的博客 3万+

手把手教你用TUSB2E22中继器实现eUSB2与USB 2.0互转(附实测数据对比)

本文详细介绍了如何利用TUSB2E22中继器实现eUSB2与USB 2.0的高效互转,包括技术背景、硬件设计要点、信号完整性测试方法及故障排查策略。通过实测数据对比,展示了TUSB2E22在信号延迟、功耗和眼图性能上的显著优势,为工程师提供了实用的工程方案。

weixin_29199873的博客 282

java基本数据类型 byte、short、int、long、float、double、char的范围和运算中注意的事项(详细)

1.Java的8种基本数据类型及其所占空间大小: 注意: ①为什么float占4个字节,而long占8个字节,float表示的范围却比long要大得多呢? 原因简单说是因为二者存储的模式不同,long类型是是直接用64位二进制位去存储数据的二进制原码,而float作为浮点数类型,在java里遵循IEEE754标准,将32位分为3个部分,第一部分1位存储符号,第二部分8位存储浮点数的科学表示后的指...

i6223671的博客 2万+

磁传感器技术解析:从霍尔效应到车规级应用,纳芯微的本土第一之路

磁传感器是现代工业与汽车电子中的关键感知元件,其技术演进经历了从分立器件到高集成度SoC的跨越。霍尔效应与磁阻效应构成两大物理基础,其中硅基霍尔方案凭借高性价比与成熟供应链,在车规级应用中占据主流。高精度电流检测、角度与位置感知、磁开关等场景,对传感器的温漂抑制、共模瞬态抗扰与批量一致性提出严苛要求。车规级可靠性体系与系统级集成能力,成为衡量供应商的核心标尺。随着新能源主驱、光伏逆变、工业伺服等应用爆发,具备完整信号链与隔离技术积累的厂商正逐步构建护城河。本文以纳芯微为样本,剖析其从隔离技术延伸至磁传感器平

weixin_34387468的博客 365

数据类型-浮点型详解

本文全面介绍了Java中的浮点型数据相关知识,包含数据类型定义,如`float`(单精度,4字节,精确到7位小数)与`double`(双精度,8字节,精确到15位小数)及类型转换示例;阐述了精度和表示范围、运算规则(`float`与`double`运算时的类型转换及浮点运算中的精度问题);说明了十进制、科学计数法两种表示形式及其数据类型特点;讲解了浮点型数据存储原理及因尾数长度有限导致的精度问题;最后强调了使用注意事项,指出运算结果不宜用“==”做相等比较,并分析原因,介绍了差值比较法这一正确比较方式。

m0_73941339的博客 6905

Rapid SCADA MQTT

一、配置RapidSCADA 1、准备KpMqtt.dll、Jint.dll库文件,从网盘下载。 2、将以上两个文件拷贝到SCADA安装目录的Comm/KP目录下,如下: C:\SCADA\ScadaComm\KP 3、新建SCADA项目 4、新建Line 5、新建Device 6、拷贝Config目录下的KpMqtt_001.xml文件、KpMqtt_Job.js文件到项目Comm\Config下,如下示例链接 C:\SCADA\Projects\MQTTProject\Instances\Defau

mumanquan1的博客 3005

simulink构建一个基于 BP(反向传播)神经网络 的自适应 PID 控制系统

本文介绍了基于BP神经网络的自适应PID控制系统设计方法。系统通过神经网络实时调整PID参数,实现智能控制。主要内容包括:1)系统架构设计,采用误差反馈和在线学习机制;2)详细建模步骤,从被控对象定义到神经网络结构设计;3)S-Function实现核心算法,包含前向传播、PID计算和反向传播;4)仿真结果分析,显示神经网络PID在响应速度、超调控制和鲁棒性方面的优势;5)进阶建议和常见问题解决方案。该方法突破了传统PID的局限性,实现了具有自我学习能力的智能控制。

xiaoheshang_123的博客 51

为什么四个字节的浮点类型比八个字节的整型取值范围要大

首先,为了知道原因,我们需要知道这两种数据类型在算机当中的存储方式是怎样的。

annotation_PLZ的博客 908

ESP8266-Arduino网络编程实例-异步TCP客户端

本次实例将使用ESPAsyncTCP库实现一个简单的客户端。

视觉与物联智能 1740

为什么四个字节的float比八个字节的long表示的范围要广

为什么四个字节的float比八个字节的long表示的范围要广 1.基本对比 2.存储方式和范围对比 long存储方式 long范围 float存储方式 float存储示例 float范围 3.结论

Zhao_zee的博客 397

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

为什么float比long类型的数据范围大

float比long类型的数据范围大。 float:4个字节 long:8个字节 为什么float的4个字节比long类型的8个字节的范围大? 因为整数与小数的底层存储有点不同。 相同点:它们都是用二进制存储的 不同点: 小数先转成二进制,然后处理,然后存储。 float类型中用一位存正负,八位存指数,23位存具体数值 所以,float类型的指数可从-126到128 float类型数值采用科学计数...

# Never Give up & 5456

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

为什么四个字节的float表示的范围比八个字节的long要广

我们在学习数据类型的时候学习了基本数据类型,基本数据类型中包括数值型、字符型、布尔型。当学习数值型时知道了数值型包括整数类型和浮点类型。下面我们用一张图来说明数值型各个类型的字节数和取值范围。从图中我们可以发现八个字节的long型居然没有四个字节的float型范围大。.........

qq_59438034的博客 381

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

为什么在java中int类型和float类型都是4个字节,但是float类型的数值范围却大于int的数值范围

为什么在java中int类型和float类型都是4个字节,但是float类型的数值范围却大于int的数值范围 在Java学习过程中,发现明明Java中的int类型和float类型所占的字节完全相同,但是float类型的数值范围确实远大于int类型的数值范围。 且随我慢慢道来。 先说真实原因而后慢慢解析 其原因就是:int类型和float组成结构 先说此两种数据类型的组成结构 int类型:第一位是符号位代表正负,剩下的31位表示数值位。 float类型:第一位是符号位代表正负,余下的是八位指数位和23位底数

qq_849405799的博客 4135

int和long类型取值范围。 基本数据类型 byte , short , char ,int , long , float ,double,boolean类型取值范围

int和long类型取值范围。 int和long类型取值范围。 1. int类型 ---------4字节(32位) ​ -------------------------------------------------------------- 范围 ①(无符号整型) ------------------------- unsigned int ...

樂小伍 1万+

为什么四个字节的float表示的范围比八个字节的long表示的范围要广

按数学的思维来理解,相同位数的小数会比整数大吗?回答肯定是不一定,但在计算机当中,四个字节的浮点数却比八个字节的整型long存储范围要大,这该如何解释。以上就是图文说明,为什么为什么四个字节的float表示的范围比八个字节的long表示的范围要广。...

qq_52025132的博客 494

为什么四个字节的float表示的范围比八个字节的long要广?

float4个字节long8个字节因为整数与小数的底层存储有点不同。它们都是用二进制存储的小数先转成二进制,然后处理,然后存储。long在内存中占用8个字节共64位,符号位占一位,数值范围是-2的63次方到正2的63次方-1。那么对于单精度浮点数float是采用这样的结构存储的,当然了double的结构也是这样,只不过double是8个字节(32位)的。...

m0_65004039的博客 300

java中float类型占4个字节,long类型占8个字节,为什么long类型能自动转换成float类型,且float类型为什么表示的范围比long类型大

作为常识我们都知道,float型在内存中占用的是4个字节,而long型占用8个字节。单从字节数来看,long型是大于float型的。但实际上,float表示的范围却是比long要大的 float类型的范围:-2^128 ~ 2^128,也即**-3.40E+38 ~ +3.40E+38** 额外补充:double类型的范围:-2^1024 ~ 2^1024 , 也即**-1.79E+308 ~ +1.79E+308**。” long类型的范围是:-263~263-1 大概是 -9.223E18~ 9.

song_6666的博客 2415

为什么四个字节的float表示的范围比八个字节的long要广?

我们都知道Java中常用的数据类型分为引用数据类型和基本数据类型,在基本数据类型中中,分为四类八种,其中整形分为byte(1字节)、short(2字节)、int(4字节)、long(8字节),浮点型分为float(4字节)、double(8字节),字符型为char(2字节),布尔型为boolean(8字节)。那为什么四个的浮点数会比8个字节的long还要大呢?总的来说,long类型的值跟float类型的值存储方式不同,通过验证,可以得到四个字节的float比八个字节的long表示的范围广。......

qq_53123736的博客 427

为什么四个字节的float表示范围比八个字节的long要广

前言 我们都知道Java中常用的数据类型分为引用数据类型和基本数据类型,在基本数据类型中中,分为四类八种,其中整形分为byte(1字节)、short(2字节)、int(4字节)、long(8字节),浮点型分为float(4字节)、double(8字节),字符型为char(2字节),布尔型为boolean(8字节)。那为什么四个的浮点数会比8个字节的long还要大呢? 验证过程 long 8个字节的空间存储为64位 float 4个字节的空间存储为3...

weixin_52515164的博客 344
上一篇: 八进制能不能直接转二进制?
下一篇: IDEA乱码解决
Liaza-
博客等级 码龄5年 12粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liaza-

感谢老板Thanks♪(・ω・

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值