6

免責事項:この質問は実用的な価値がないかもしれません、それはパズル/好奇心の質問です。

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のfloatのサイズを見つける同様の方法はありますか?

4

3 に答える 3

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
于 2012-07-13T07:23:38.913 に答える
2

Java浮動小数点数はIEEE浮動小数点標準に準拠しているため、詳細を簡単に知ることができます。一言で言えば、2の補数の整数エンコーディングの場合のように、floatの「使用済み」部分と「未使用」部分を明確に区別することはできません。基本的な分割は、符号ビット、仮数、および指数です。どの仮数ビットが使用され、どの指数ビットが使用されているかがわかるかもしれませんが、それは簡単な作業ではありません。

于 2012-07-13T07:24:52.783 に答える
1

二分探索を書きます。0から開始し、プラスマイナス0.5 * Float.MAX_VALUEを繰り返して、繰り返します。

この方法は、どの数値タイプでも機能し、上記のループよりもはるかに高速である必要があります。

于 2012-07-13T07:28:15.760 に答える