我确定我缺少一些东西。我使用这段代码:
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(单精度)位序列(除了滚动我自己的,我已经这样做了)?
谢谢