java - 如何将 java float 表示为二进制文字?
问题描述
我试图弄清楚 float 和 doubles 在 Java 中是如何工作的。 有解释说我们可以将 5.3 表示为
0 | 10000001 | 01010011001100110011001
但是当我尝试将它写为二进制 java 文字时
float number = 0b01000000101010011001100110011001;
System.out.println(number);
我得到了输出1.0848567E9
。
如果我使用这个问题的方式将 5.3 表示为二进制
int intBits = Float.floatToIntBits(5.3F);
String binary = Integer.toBinaryString(intBits);
System.out.println(binary);
我得到一个完全令人困惑的结果1000000101010011001100110011010
,第一个位置是 1,我认为这意味着一个负号。
有人可以帮助我理解我做错了什么吗?我可以使用二进制 Java 文字来表示浮点数和双精度数吗?
谢谢。
解决方案
根据Java Language Specification,没有您想要的形式的二进制浮点文字。
0b01000000101010011001100110011001
是int
文字,但有一种方法可以将其转换int
为float
:
System.out.println(Float.intBitsToFloat(0b01000000101010011001100110011001));
这会打印5.2999997
,因为您的表示不是最准确的。更准确的一个是:
0b01000000101010011001100110011010
使用它会打印 5.3。
另请参阅工具IEEE Floating Point Converter,您可以使用它来获取浮点数的二进制表示。
推荐阅读
- laravel - Laravel GraphQL Lighthouse 单元测试突变返回错误“语法错误:意外
" - c# - T-SQL 中的 NEWID() 和 System.Guid.NewGuid() 会创建相同的键吗?
- c# - C#单元测试模拟服务忽略返回
- leaflet.markercluster - 渲染一个标记的 divIcon 而不是集群标记
- xpages - 更新 NotesDocument 不会更新绑定的 NotesXspDocument
- android - 群聊消息最有效的数据库结构是什么?
- deployment - Uffizzi Cloud 企业层的“高可用性”是什么意思?
- reactjs - 将多个事件插入谷歌日历
- algorithm - 如何有效地处理后继图中的最短路径查询?
- python - python中两个不同日期之间的差异