如何获得double
或float
的单个位(或整个变量)?
例如,如果我有 float a = 0.5;
我希望String
等于:
"00111111000000000000000000000000"
或以十六进制表示:
"F000000"
答案 0 :(得分:12)
long bits = Double.doubleToLongBits(myDouble);
System.out.println(Long.toBinaryString(bits));
答案 1 :(得分:3)
看看Float.floatToIntBits() or Float.floatToRawIntBits()
。这会让你得到一个int作为一个位。如果您需要它作为字符串,Integer.toBinaryString()
。
请注意,如果HSB处于打开状态可能会出现问题 - 您可能需要转换为长按以避免“溢出”。
答案 2 :(得分:1)
Double.byteValue()
可能会对您有所帮助。
还有一个32位的等效Float.byteValue()
。
答案 3 :(得分: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");
}
}