Java浮点数表示为十六进制数

Java浮点数表示为十六进制数,java,floating-point,hex,Java,Floating Point,Hex,为什么0x1p3等于8.0?为什么0x1e3等于483,而0x1e3d等于7741?它令人困惑,因为1e3d等于1000.00x1e3表示483的十六进制,0x1e3d表示7741的十六进制。e被读取为值为14的十六进制数字。0x1e3和0x1e3d是十六进制整数文字。请注意,e和d是十六进制数字,在这种情况下不是指数指示器或double类型指示器 1e3d是一个十进制浮点文本。e是指数指示器,d表示这是double而不是float 表示法0x1p3是用十六进制表示浮点文字的一种方法,正如您在J

为什么
0x1p3
等于
8.0
?为什么
0x1e3
等于
483
,而
0x1e3d
等于
7741
?它令人困惑,因为
1e3d
等于
1000.0

0x1e3表示483的十六进制,0x1e3d表示7741的十六进制。
e
被读取为值为14的十六进制数字。

0x1e3
0x1e3d
是十六进制整数文字。请注意,
e
d
是十六进制数字,在这种情况下不是指数指示器或
double
类型指示器

1e3d
是一个十进制浮点文本。
e
是指数指示器,
d
表示这是
double
而不是
float


表示法
0x1p3
是用十六进制表示浮点文字的一种方法,正如您在Java语言规范中看到的那样。表示1乘以2的幂3;指数是二进制的(因此,它是2对幂,而不是10对幂)。

@marcog这是表示浮点数的一种方法,请参阅JLS:@marcog:这是十六进制浮点文字的指数标记,如Java和C99标准中定义的。啊,0x1e3是十六进制数,所以这里的“e”不是指指数。@seal,不同之处在于0x1e3是整数,而不是浮点数。那个整数中的“e”只是一个令人困惑的不幸巧合。0x1p3是一个浮点数。这是非常不同的解释。解释包括尾数和指数。前者是1.0部分(请注意假定的小数点)。后者是“p3”部分,读取“到三次方”。由于我们是二进制的,将一个数字到三次方等于将其向左移动3位,因此0b1变为0b1000。十进制是8,但在这种情况下0x1p3应该和1e3一样,对吗?但它们不是真的。@No,因为指数是二进制的,而不是十进制的。它的2^3不是10^3.Btw,有什么理由它是二进制的吗?我的意思是,为什么它不是基数16?基数16(十六进制)是一种人类构造,可以帮助我们管理长串位而不会发疯。在计算机中,它都是二进制的,没有十六进制。请注意,一个二进制nybble(4位)直接映射到1个十六进制数字。因此字节11010111变为(1101)(0111)=0xD7。是的,但在1e3表示法中,指数是十进制的。