私が見逃しているものがあると確信しています。私はこのコードを使用します:
int bitsVal = Float.floatToIntBits(f);
String bitsString = Integer.toString(bitsVal, 2);
これは正の数ではうまくいくようです。つまり、32ビット表現全体を取得するには、文字列にゼロを左に埋める必要がありますが、それ以外の場合は問題ありません。
たとえば、f = 2.085の場合、次のようになります。
bitsString=100 0000 0000 0101 0111 0000 1010 0100
(わかりやすくするために自分でスペースを追加しましたが、実際にはありません)
最初のビットは符号ビット(この場合は0)であるため、1と0は31個しかありません。したがって、32個の要素が得られるまで0を左パッドで埋めても問題ありません。
同じことがf=0.85にも当てはまり、次のようになります。
bitsString=11 1101 1010 1110 0001 0100 0111 1011
これも問題ありません。これは、最初に欠落している2つのビットが0(ここでも符号の場合)であり、正規化された指数の2進表現が01111011であるため0です。
しかし、負の値の場合、私は本当に奇妙な値を取得します。私が理解していることから、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(単精度)ビットシーケンスを取得する方法はありますか?
ありがとう