鱼悠奕 2024-01-09 15:02 采纳率: 58.3%
浏览 10
已结题

浮点数float存储各进制整数问题

//        long和float类型 加上后缀L、F 推荐大写
        long l1 = 0b10L, l2 = 010L, l3 = 10L, l4 = 0x10L; // 0b二进制 0八进制 0x十六进制
        float f1 = 0b10, f2 = 010F, f3 = 10F, f4 = 0x10F; // f1自动类型转换
        System.out.println(l1 + " " + l2 + " " + l3 + " " + l4); // 2 8 10 16
        System.out.println(f1 + " " + f2 + " " + f3 + " " + f4); // 2.0 10.0 10.0 271.0 
//        float f1 = 0b10F; // 二进制 标红报错 Cannot resolve symbol 'F'

运行环境

JDK 9.0.4、IDEA 2023.2

遇到问题

1、float f1=0b10F;为什么标红报错
2、f2=010F;(10)八进制=(8)十进制,为什么打印输出10.0,不是8.0
3、f4=0x10F;(10)十六进制=(16)十进制,为什么打印输出271.0,不是16.0

思考过程

存储方式

数据在计算机中都是以二进制形式存放,浮点数在内存中按科学计数法存储
float类型,4字节,共32位。1位符号位、8位指数位、23位尾数位
任何一个数的二进制科学计数法表示为 1.x * 2^n ,指数位为元数据+127,尾数位为x

进制转换

1、十进制数转换为其他进制数

​ 整数部分:除进制数,余数倒序

​ 除2最终一定能够得到0,算法不会无限循环下去,整数永远可以用二进制精确表示

​ 小数部分:乘进制数取整,顺序排列,直到积中的小数部分为零,或达到所要求的的精度为止

​ 乘2可能不能消灭小数部分,算法将会无限循环下去,小数的二进制表示有时不精确

2、其他进制数转换为十进制数,各位乘位权,再相加

3、其他进制之间相互转换,中间经由十进制,例如二进制先转为十进制,再转为八进制

开始思考

1、(10)二进制=(2)十进制:10.0 = 1* 2^1
0 1000 0000 000 0000 0000 0000 0000 0000
2、(10)八进制=(8)十进制:1000.0 = 1 * 2^3
0 1000 0010 000 0000 0000 0000 0000 0000
3、(10)十六进制=(16)十进制:1 0000.0 = 1*2^4
0 1000 0011 000 0000 0000 0000 0000 0000
先将各进制数转成十进制,再转成二进制科学计数法得到在内存中的存储
最后再由内存存储换算出数值,倒换过来还是2.0、8.0、16.0
感觉问题就是出在浮点数的存储方式上,用的科学计数法存储
long类型是整型的一种,所以将各进制整数赋值给龙类型变量没有问题
float类型是浮点型的一种,内部采用科学计数法存储
上述倒换过程,是人脑中的思考思路
是不是因为计算机中的计算过程不是上面这样的,猜的
0b10、010、0x10的内存存储方式转成浮点数的内存方式,至于是什么方式,自己也不知道

  • 写回答

2条回答 默认 最新

  • Visual code AlCv 2024-01-09 15:59
    关注

    个人拙见:
    1.0b10F表示的是二进制数,但Java中浮点数不能以二进制表示。正确的写法应该是float f1=2.0F;
    2.在Java中,以0开头的数字默认为八进制表示。所以010F实际上是以八进制表示的10,对应的十进制是8。
    3.0x10F表示的是十六进制数,对应的十进制是271,我用程序员计算器算过了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月10日
  • 已采纳回答 1月10日
  • 创建了问题 1月9日

悬赏问题

  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序