首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java十六进制浮点文字歧义

Java十六进制浮点文字歧义
EN

Stack Overflow用户
提问于 2018-06-25 14:55:39
回答 2查看 441关注 0票数 3

在Java 规格说明中,它说:

对于十六进制浮点文字,至少需要一个数字(无论是整数还是分数部分),指数是强制性的,浮点类型后缀是可选的。指数由ASCII字母p或P表示,后面跟着可选的带符号整数。

据我所知,表示字母的指数必须是p或P,才能用十六进制数字E或E解决歧义。为什么它会说后缀表示类型(浮点数对双)是可选的,当使用它时会引入字母d,D,f,F的歧义,这也是十六进制数字?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-25 14:59:59

根据语法

DecimalFloatingPointLiteral:数字。数字FloatTypeSuffix。数字ExponentPart位ExponentPart FloatTypeSuffix位ExponentPart FloatTypeSuffix HexadecimalFloatingPointLiteral: HexSignificand BinaryExponent FloatTypeSuffix

对于十六进制浮点数,可选FloatTypeSuffix必须遵循强制BinaryExponent

如果添加一个f或没有BinaryExponentd,则它是一个十进制浮点数。

票数 4
EN

Stack Overflow用户

发布于 2018-06-25 15:13:53

十六进制的形式是使尾数精确。指数是一个整数,可以精确地表示为十进制,因此与字母d或f没有冲突。

规格化浮点数的形式如下:

代码语言:javascript
复制
sign * 1.mantissa * 2 ^ exponent

如果您查看这些示例,预计在精确指定尾数时将使用十六进制小数表示法。

代码语言:javascript
复制
// from java.lang.Double

public static final double MAX_VALUE = 0x1.fffffffffffffP+1023; // 1.7976931348623157e+308

public static final double MIN_NORMAL = 0x1.0p-1022; // 2.2250738585072014E-308

public static final double MIN_VALUE = 0x0.0000000000001P-1022; // 4.9e-324

在这种形式下,很容易看到预期的尾数和指数。虽然其他形式是可能的,但它们并不是那么清楚。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51026405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档