2012-05-17 22 views
5

doubleまたはfloatの単一ビット(または変数全体)を取得するにはどうすればよいですか?浮動小数点をビットに変換

例えば、 float a = 0.5の場合、

私はに等しいString期待:
"00111111000000000000000000000000"

または六角中:
"F000000"

+0

この宿題ですか? – dckrooney

+0

いいえ、なぜですか?これはhttp://stackoverflow.com/questions/10637594/calculating-double-neighbours-of-a-decimal-valueに関連しています。私はバイナリ値から1を引くと、もう1つの値が得られると思いました。 –

+3

@dcrooneyは宿題であるかどうかを知ることは良いことだから尋ねました。なぜなら、宿題をするときに、私たちはあなたの学習を妨げない答えに注意しようとするからです。 – kentcdodds

答えて

9
long bits = Double.doubleToLongBits(myDouble); 
System.out.println(Long.toBinaryString(bits)); 
+1

符号ビットがゼロの場合、それは印刷されません! – math

+0

@math、説明できますか?符号ビットが印刷されないことを意味しますか、その全体の値ですか?前者の場合、 'Long.toBinaryString'は「この[unsigned long]値は2進数(2進数)のASCII文字列に変換され、余分な先行0はありません」という無関係なビットを出力しません。符号ビットに固有です。左から値をゼロにして、希望の列幅を得ることができます。 –

+0

私が言ったように、それは先行ゼロのために印刷されません。もちろん、これを先行ゼロで埋めることもできますが、上記の記述は誤解される可能性があります。そして、指数に先行ゼロもあれば、同様に切り捨てられます。 – math

1

Double.byteValue()はあなたを助けるかもしれません。

また、32ビット相当のFloat.byteValue()もあります。

+4

なぜ+4?彼の例に基づいて、これは彼が望むものではありません。 – user949300

+2

バイト値は '(byte)myDouble'と同等の値を返します。それは損失のある変換です。 –

+1

**この回答は間違っています。** 'Float.byteValue()'と 'Double.byteValue()'は単に数値をbyteにキャストします。 – Pacerier

3

Float.floatToIntBits() or Float.floatToRawIntBits()をご覧ください。それはintとしてビットを取得します。文字列として必要な場合は、Integer.toBinaryString()

HSBがオンの場合は問題が発生する可能性があります。「オーバーフロー」を避けるためには、長い形式に変換する必要があります。

+0

IEEE-754浮動小数点数のHSBは、NaN値でない限り符号ビットであるため、結果のintの符号は-0.0を除いてfloatの符号と同じになります。 –

+0

合意。このコメントは、Javaの一部である<->の文字列コードがHSBについて厄介であるためです。例えば[このスタックオーバーフローの議論](http://stackoverflow.com/questions/8888946/converting-32-bit-binary-string-with-integer-parseint-fails)私はそれが主にストリングを解析するのではなく、ストリングを作成することだと思うが、ここでは問題が適用されないかもしれない。 – user949300

0
public void printFloatBits(float f) { 
    int bits = Float.floatToIntBits(f); 
    // Extract each bit from 'bits' and compare it by '0' 
    for (int i=31; i>=0; --i) { 
     // int mask = 1 << i; 
     // int oneBit = bits & mask; 
     // oneBit == 0 or 1? 
     System.out.print((bits & (1 << i)) == 0 ? "0" : "1"); 
    } 
} 
+2

あなたのコードに説明を加えてください。 –

関連する問題