在Java中获取(十进制)浮点的IEEE 754(单精度)表示
我肯定我错过了什么。我使用以下代码:在Java中获取(十进制)浮点的IEEE 754(单精度)表示,java,bit,ieee-754,Java,Bit,Ieee 754,我肯定我错过了什么。我使用以下代码: int bitsVal = Float.floatToIntBits(f); String bitsString = Integer.toString(bitsVal, 2); 这似乎对正数很有效。我的意思是,字符串必须用零填充才能得到整个32位表示,否则就可以了 例如f=2.085,我得到: bitsString=100 0000 0000 0101 0111 0000 1010 0100 (为了清晰起见,我自己添加了空格,它们实际上并不存在) 这里只
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
这同样是好的,因为前两个缺失的位是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”(我猜)有奇怪的值
所以我的问题是,有没有一种方法,可以使用JavaAPI获得给定浮点数的IEEE754(单精度)位序列(除了滚动我自己的,我已经这样做了)
Thanx问题是Java中的
int
是有符号的。当您执行Integer.toString时(bitsVal,2)
您没有显示bitsVal
的文字位,而是显示这些位所表示的有符号整数的基二表示(即integer.toString((int)0xFFFFFFFF,2)
将生成-1
)
但是Integer.toBinaryString(bitsVal)
将该值视为无符号32位整数,因此应该生成您所追求的结果(Integer.toBinaryString((int)0xFFFFFFFF)
将生成一个32 1的字符串)