gpt4 book ai didi

java - 在 Java 中获取(十进制) float 的 IEEE 754(单精度)表示

转载 作者:行者123 更新时间:2023-12-04 05:10:07 27 4
gpt4 key购买 nike

我确定我遗漏了一些东西。我使用这个代码:

int bitsVal = Float.floatToIntBits(f);
String bitsString = Integer.toString(bitsVal, 2);

这似乎适用于正数。我的意思是,字符串必须用零左填充以获得整个 32 位表示,但除此之外,这很好。

例如 f=2.085 我得到:
bitsString=100 0000 0000 0101 0111 0000 1010 0100

(为了清楚起见,我自己添加了空格,它们实际上并不存在)

那里只有 31 个 1 和 0,因为第一位是符号位,在这种情况下是 0,所以如果我只是用 0 填充它直到我得到 32 个元素就可以了。

f=0.85 也一样,它给出:
bitsString=11 1101 1010 1110 0001 0100 0111 1011

这再次很好,因为前 2 个丢失的位是 0(同样,对于符号),又是 0,因为归一化指数的二进制表示是 01111011。

但是对于负值,我得到了非常奇怪的值。据我了解,如果 f 的给定正值给出 0xxxxxx 的 IEEE 754(单精度)表示(0 后跟归一化指数和尾数的 31 位),那么负 f 将返回相同的序列,除了第一位左侧从 0 变为 1。

但是使用上面的代码,对于 f=-0.85 我得到
bitsString = -100 0010 0101 0001 1110 1011 1000 0101

除了应该是“1”(我猜)的“-”(减去字符)之外,还有奇怪的值。

所以我的问题是,有没有办法使用 Java API 来获取给定浮点数的 IEEE 754(单精度)位序列(除了滚动我自己的,我已经这样做了)?

谢谢

最佳答案

问题是int在 Java 中签名。当您这样做时Integer.toString(bitsVal, 2);你没有显示 bitsVal 的文字位,您正在显示这些位代表的有符号整数的基数二表示(即 Integer.toString((int)0xFFFFFFFF, 2) 将产生 -1 )。

但是Integer.toBinaryString(bitsVal)将该值视为无符号 32 位整数,因此应该产生您所追求的结果(Integer.toBinaryString((int)0xFFFFFFFF) 将产生一个由 32 个 1 组成的字符串)。

关于java - 在 Java 中获取(十进制) float 的 IEEE 754(单精度)表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15000728/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com