Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中获取(十进制)浮点的IEEE 754(单精度)表示_Java_Bit_Ieee 754 - Fatal编程技术网

在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的字符串)