Java语言中:float数据类型在内存中是怎么存储的?

摘要:
=============================================================================java语言中,float类型数字在计算机中用4个字节来存储。遵循IEEE-754格式标准:即:一个浮点数有2部分组成:底数m和指数e---------------------------------------底数m部分:使用二进制数来表示此浮点数的实际值。指数e部分:占用8bit的二进制数,可表示数值范围为0-255。---------------------------------------但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。所以,float类型的指数可从-126到128。---------------------------------------底数部分实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit。

=============================================================================
java语言中,float类型数字在计算机中用4个字节来存储。遵循IEEE-754格式标准:
即:一个浮点数有2部分组成:底数m和指数e
---------------------------------------
底数m部分:使用二进制数来表示此浮点数的实际值。
指数e部分:占用8bit(1个字节)的二进制数,可表示数值范围为0-255。
---------------------------------------
但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。
所以,float类型的指数可从-126到128。
---------------------------------------
底数部分实际是占用24bit(3个字节)的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit。
---------------------------------------
科学计数法。
  格式:
    SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
    S表示浮点数正负;
    E表示指数加上127后的值后得二进制数据;
    M表示底数。
  举例:
    17.625在内存中的存储为:
    首先要把17.625换算成二进制:10001.101
---------------------------------------
    整数部分:除以2,直到商为0,余数反转。(即:模2取余法)
    17 / 2 = 8 --- 1
    8 / 2 = 4 --- 0
    4 / 2 = 2 --- 0
    2 / 2 = 1 --- 0
    1 / 2 = 0 --- 1
    小数部分:乘以2,直到乘位为0,进位顺序取。(即:乘2取整法)
    按如下算法进行:
      1)首先给小数部分乘2,得到的数,如果小数点前为1;则计1,为0,则计0。
      2)再对剩下的小数部分乘2,再计出1或0。
      3)重复以上步骤,直至达到需要的精度。
    0.625 x 2 = 1.2 --- 计为1
    0.3 x 2 = 0.6 --- 计为0
    0.6 x 2 = 1.2 --- 计为1
    0.2 x 2 = 0.4 --- 计为0
......(算到需要的精度为止)

再例如:
0.5 x 2 = 1.0 --- 计为1
0 x 2 = 0    --- 结束
    所以:0.5(D) = 0.1(B)

十 二

---------------------------------------
  再将10001.101右移,直到小数点前只剩1位:
  1.0001101 * 2^4 因为右移动了四位,
---------------------------------------
  这个时候,我们的底数和指数就出来了。
    底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
    指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011
  符号部分是正数,所以是0
  综上所述,17.625在内存中的存储格式是:
  01000001 10001101 00000000 00000000
---------------------------------------
  换算回去:自己做。
=============================================================================

免责声明:文章转载自《Java语言中:float数据类型在内存中是怎么存储的?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇NVMe概述ps 简单使用 ----- 将图片静态图片制作成动图下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

内网esxi磁盘空间不足导致虚拟机宕机

因为一些占用太多空间的虚拟机可能无法启动。我不断拍摄快照以保存测试版本。我跳过了同一网段上的一个虚拟机ssh,并一直看着翻译器学习如何释放虚拟磁盘空间。您只能创建一个新的虚拟机来读取原始磁盘目录,并且只能重新构建一个新Linux机器进行测试。然后上传一个测试文件(最大程度地模拟其他虚拟机环境)。首先,你需要关闭机器。厚配置延迟将整个虚拟机目录文件清零,如下所...

Django如何安装指定版本

Django的最新版本默认安装为:pipinstalldjangoDjango,然后是版本号:pipinstalldjango==1.11.7如果使用pipinstall库的安装速度较慢,您可以使用豆瓣的图片:pipinstalldjango==1.11.7-ihttp://pypi.douban.com/simple--trusted-hostpypi.d...

linux下ifconfig, DNS以及route配置

Linux基本网络配置命令1.ifconfig查看网络接口信息。普通用户使用的ifconfig的完整路径:/sbin/ifconfigifconfig网络接口名称:显示指定接口的详细信息。...

愿你走出半生,归来仍是Java Parser

几天前,我的一个朋友给了我一个Haskell问题嘿,MK。假设我有一个BNF,我在Haskell中有一个这个BNF的解析器。现在,我想为这个BNF换一条线。是否有任何方法可以在不接触BNF解析器代码的情况下扩展BNF解析器?让我们想想,这个x是什么样的变体?请记住,传入的参数不是self,而是super。好了,openrecursion已经准备好了,剩下的是...

Windows Server 2019 Active Directory (AD域)时间不同步的解决方法

2.启用NTPServerHKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProviderNtpServer,将键Enabled的值修改为十进制的1。快速将所有注册表导入WindowsRegistryEditorVersion5.00[HHKEY_LOCAL_MACHINESOFTWAR...

推荐几种加快火狐浏览器速度的办法

键入browser.cache。内存容量,指定值65536。确认后,重新启动Firefox以获得更大的缓存。这对于减少数据传输非常有帮助,特别是如果您的月流量有限,并且它几乎可以使Firefox浏览器的性能翻倍。...