Java中浮点数的表示方法

article/2025/10/15 21:23:39

Java中浮点数的表示方法

    • Java中浮点数的表示方法
      • 1.计算机中的表示方法
      • 2.具体分析表示方法
        • 小结
      • 3.移位存储
        • 小结

1.计算机中的表示方法

w8TRi.png

对于float来说,4个字节,32位,0-22位表示尾数,23-30(8位)表示指数,31位表示符号位。

对于double来说,8个字节,64位,0-51表示尾数,52-62(11位)表示指数,63位最高位表示符号位。

2.具体分析表示方法

以一道例题开始

public static void main(String[] args) {float f1=20f;float f2=20.3f;float f3=20.5f;double d1=20;double d2=20.3;double d3=20.5;System.out.println(f1==d1);System.out.println(f2==d2);System.out.println(f3==d3);
}
true
false
true

20:

表示如下:注意,指数位要移位存储,即float+127(2^7-1),double+1023(2^10-1)

f:0|1000 0011|0100 0000 0000 0000 0000 000
d:0|100 0000 0011|0100 0000(01后面50个0)

比较的时候是以符号位,指数位,小数位分别比较的,不足的地方以0补齐,所以相等,

符号位均为0;

指数位float减去127,并在前面补0,double减去1023;

尾数位,float末尾补0

所以相等。

20.3

1.十进制数转化为二进制数

如何将十进制转换成二进制浮点数呢, 先介绍一下十进制的浮点数 转换二进制的浮点数,分为两部分:

  1. 先将整数部分转换为二进制,
  2. 将小数部分转换为二进制, 然后将整数部分与小数部分相加。

以 20.3 转换为例,

20转换后变为 10100

0.3 要转换二进制,需要乘2, 乘完之后 取整数部分,然后用乘的结果减去整数部分, 然后 接着乘2, 直至最后没有小数或者小数出现循环, 即乘完.

20 = 10100 (二进制)

0.3 * 2= 0.6 (0)

0.6 * 2 = 1.2 (1)

0.2 * 2= 0.4 (0)

0.4 * 2 = 0.8 (0)

0.8 *2 = 1.6 (1)

计算到这里, 将再出现0.6,进入循环了,所以,结果

0.3 = 0.010011001…1001

所以20.3 = 10100.010011001…1001 (二进制).

2.二进制数转化为科学计数法

20.3 = 10100.010011001…1001 (二进制)=1.01000100110011E10…..(十进制科学计数)=1.01000100110011E100…..(二进制科学计数)

这里使用移位存储,对于float来说,指数位加上127,double位加上1023(这里指的是存储,在比较的时候要分别减去127和1023)

小结

  1. 同时要注意一点,以float为例,最高位表示的是整个数的符号位,指数位一共8位,最高位表示的是指数位的正负,因为有可能是E-100这样的情况,所以虽然有8位,最高位只是符号位,剩下7位才是表示真正的数值,这也是使用移位存储的原因。

  2. 对于一个数字,只要不超过和float的范围,同时小数部分不是无限小数,就可以和对应的double类型相等。

3.移位存储

移位存储本质上是为了保证+0和-0的一致性。

以float指数部分的这8位来分析,

那么这8位组成的新的字节,我们来用下面的一串数字表示:0000 0000

首先,我们假设不使用移位存储技术,而是单单看看这个 8位组成的新字节,到底能表示多少个数: 0000 0000 -1111 1111 即0-255,一共256个数。

但是我们知道这8位数既要表示正数也要表示负数

所以将左边第一位拿出来表示正负的符号:

第一个区间:

0 000 0000-0 111 1111 
即+0 到127

第二个区间:

1 000 0000-1 111 1111
即 -0到-127

这就是问题的所在:怎么会有两个0,一个正零,一个负零。

这时候使用移位存储:float使用127(0011 1111)

  • 表示0 0+127=127 即 0000 0000 +0111 1111=0111 1111
  • 表示1 1+127=128 即 0000 0001 +0111 1111=0111 1111
  • 表示128 128+127=255 即 1000 0000+0111 1111=1111 1111

最大的正数,再大就要溢出了。

  • 表示-1 -1+127=126=127-1 即 0111 1111-0000 0001=0111 1110
  • 表示-1 -2+127=125=127-2 即 0111 1111-0000 0010=0111 1101
  • 表示-127 -127+127=0 即0111 1111-0111 1111=0000 0000

最小的负数,在校就溢出了。

小结

由上面的 6个例子,我们可以得出规律,采用移位存储技术,我们可以使用 8位二进制来表示从 -127~128 共计 127个负数+零(0)+128个正数总共 256个数,看来使用移位存储即没有+0和-0的问题,又充分的使用这个新生成的 8位二进制数来最大限度的表示单精度浮点数,是非常合理的,只是这里大家需要注意,在使用移位存储技术时,得到的两个区间:

0 000000 0~ 0 111111 1

这里不严谨的称之为 0区间,在0区间内表示 -127~0 ,0包含在此区间。

0 000000 0表示的是 -127 而不是0,

0 111 111 1表示的是0 而不是 +127,

1 000000 0~ 1 111111 1

这里我们称之为 1区间,在1区间内表示的是 1~128


http://chatgpt.dhexx.cn/article/l9fISfEf.shtml

相关文章

浮点数的表示

科学计数法 浮点数的表示 阶码E反映表示范围及小数点的实际位置 位数M的数值部分的位数n反映浮点数的精度 浮点数尾数的规格化 左移三位 0.110;1.0100000 表示范围 浮点数标准 IEEE 754 移码 阶码真值移码-偏移量

dsp处理浮点数_DSP中浮点数的表示方法

DSP中浮点数的表示方法 tongxin | 2009-03-20 15:16:17 阅读:2484 发布文章 先介绍一下IEEE754中浮点数的定义(这里只介绍单精度浮点数): %A %A 单精度浮点数由4字节(32位)组成,且分成3段:数符s(0表示正数,1表示负数…

C语言浮点数的各种表示方法

2022.8.7更新 学习js的过程中发现了0.10.2更深一层的运算过程,感兴趣的可以看看这个博主写的帖子。 JavaScript 浮点数之迷:0.1 0.2 为什么不等于 0.3? ​​​​​​​ 前提: 由于存在精度限制,浮点数只是⼀个近似值&…

浮点数的表示方法是什么?

是已知的C/C编译器都是按照IEEE(国际电子电器工程师协会)制定的IEEE浮点数表示法来进行运算的。这种结构是一种科学表示法,用符号(或-)、指数和尾数来表示,底数被确定为2。所以在IEEE浮点数表示法里&#x…

浮点数表示总结

浮点数 早期的计算机使用定点数来表示实数,由于定点数的小数点位置固定,而计算机字长有限,定点数无法表示很大和很小的实数,因此而在计算机科学中有了对于实数近似值数值的表示法——浮点数。这种表示法类似于十进制中的科学计数…

计算机中浮点数表示

浮点数表示 浮点数在计算机中由符号位、指数和尾数组合而成。 通常,浮点数表示为如下形式: F为小数(尾数)字段值,E为指数字段值。 溢出(浮点的上溢):正的指数太大而超过了指数字段的表示范围。 下溢:负的指数太大而…

计算机组成原理浮点数表示

浮点数表示 浮点数的表示分为阶码和尾数; 比如3.026*1011;阶码是11;尾数是3.026; 对于阶码: 阶符为正,小数点向后移n位(n表示阶的大小); 阶符为负,小数点向前移n位(n表示阶的大小&a…

初步了解机器中浮点数表示方法

浮点数是小数点位置变化的数,能表示的范围比定点数大很多。 比如二进制数11.11可以表示为111.12-1或1.11121等,我们由此规律能得到二进制数更一般形式N2EF,E称为阶码,F称为尾数。这个数在机器里怎么存呢,是把正负符号…

32位浮点数表示方法

今天开始给大家介绍计算机组成原理课程,本文主要内容是32位浮点数表示方法。 一、32位浮点数构成 32位浮点数是计算机中常见的一种数据类型,该数占据32bit空间,可以表示较大范围内的整数和小数。32位浮点数由三部分组成,分别是符…

浮点的表示方法

浮点表示方法 一、浮点的表示方法一、单精度类型(float)二、双精度类型(double)三、IEEE 754标准 单精度名称本身的含义是“单字长精确的程度”。跟什么32位、64位有没有关系, 取决于系统支持的字长(word)是几个字节(…

浮点数的表示方法

把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示。这种把数的范围和精度分别表示的方法,相当于数的小数点位置随比例因子的不同而在一定范围内可以自由浮动,所以称为浮点表示法。 在计算机中一个任意二进制数N可以写成: …

IOS磁力下载软件,老司机必备品

软件名为袋鼠下载,一款比较傲娇的APP目前仅支持iOS端,全程使用无广告无弹窗,关键支持任何资源的下载,直链、磁力、BT什么的通通不再话下,也不会针对性的进行限速,这样的免费产品在Android中都属不多见的精品…

这2个在线资源网千万别错过,老司机人手一份,一年省下好几千

早些时候,国内的电影资源网站大部分是搬运了国外的破解资源,并非自己 “ 原创 ” 出来的,这两天很多人都在想尽办法求《哪吒》熟肉资源,我们这边的电影院已经下播了,然后大家也知道,新出的电影在下播之后也…

实用的在线网站

目录 文档类 1. 轻松玩转PDF 2. Convertio:在线的文件转换器 3. CleverPDF 4. vvv文档在线导出工具 5. 微信公众号格式化编辑器 6. Process On:免费在线作图,实时协作 7. ALL TO ALL(在线格式转换) 8. Office…

Linux在线安装jdk

Linux在线安装jdk 远程连接Xshell后,切换到root用户(使用su命令切换到root用户) 使用cd命令切换到/usr目录(/usr目录:用户的很多应用程序和文件都放在这个目录下面,类似于windows下的program files目录) cd /usr在/usr下创建目录java&#x…

想要成为python大神,这17个老司机收藏的国外免费学习网站不可错过!

用Python编写代码一点都不难,事实上它一直被赞誉为最容易学的编程语言。 如果你准备学习web开发, Python是一个不错的开始,甚至想做游戏的话,用Python来开发游戏的资源也有很多。 许多程序员都把Python作为编程之旅的开始,然后是像PHP和Ruby这样的语言。它也是最热门的W…

老司机谈鉴黄,新一代“鉴黄师”是如何养成的?

在互联网高速发展的今天,直播平台,内容社区,视频网站等UGC/PGC平台蓬勃发展,如雨后春笋般出现。但巨大的安全隐患也接踵而至,内容审核成为企业最关键的一道防火墙。企业招聘大量的内容审核专员来应对包括色情、暴力、犯…

福利:tumblr五年驾龄老司机必备利器

大名鼎鼎的tumblr不用多说,分享几个非常好用的软件工具,全都是亲测好用 如果你发现更好用的工具,tell me tell me 官方app Tumblr 安卓版 Tumblr iOS版 下载视频 电脑端 win:维棠 推荐此软件可批量下载某个博主的视频&#xff0c…

IT老司机福利 | 这十多个新姿势你知道吗?

1024这个数字, 相信不少纵横IT界的老司机都十分熟悉 1024=2^10 1024字节=1KB +1024还是网络流行语 …… 然而 每天早出晚归的IT老司机 只掌握一个知识点是不行的 不upgrade自己 学习新姿势怎么棒棒? 3月24日 本周五 BingoDay2017

分享7个比B站更刺激的老司机网站,别轻易点开

俗话说摸鱼一时爽,一直摸一直爽,作为一个程序员老司机了,一头乌黑浓密的头发还时不时被同事调侃,就靠这10个网站让我健康生活,不建议经常性使用,因为还有一句俗话,那就是“摸鱼一时爽&#xff0…