免责声明:这个问题可能没有实际价值,更多的是一个谜题/好奇心问题。
在Java中,我可以编写以下代码以编程方式查找int的大小:
public static void main(String[] args)
{
int x = 1;
int count = 1;
while((x = x << 1) != 0)
{
count++;
System.out.println("x: " + x + ", " + count);
}
System.out.println("size: " + count);
}
是否有类似的方法以编程方式查找Java浮点数的大小?
答案 0 :(得分:8)
将float写入ByteArrayOutputStream并获取结果的长度。
import java.io.*;
class Test
{
public static void main(String[] args) throws Exception
{
ByteArrayOutputStream baos =new ByteArrayOutputStream();
DataOutputStream dos=new DataOutputStream(baos);
dos.writeFloat(0f);
System.err.println(baos.toByteArray().length);
}
}
$ javac Test.java
$ java Test
4
答案 1 :(得分:2)
Java浮点符合IEEE浮点标准,因此您可以轻松地了解详细信息。简而言之,浮点数的“已使用”和“未使用”部分之间没有干净的分离,因为它与二进制补码整数编码一致。基本划分为符号位,尾数和指数。您可能会看到使用了哪些尾数位以及使用了哪些指数位,但它远非一项微不足道的任务。
答案 2 :(得分:1)
我会写二分搜索。从0开始,然后转到正负0.5 * Float.MAX_VALUE并继续迭代。
此方法适用于任何数字类型 - 并且应该比上面的循环快得多。