JAVAにおけるfloat浮動小数点数変換についてIEEE 754標準4バイト16進数データ変換方式
2005 ワード
解析に関する具体的な書き方は、ある文章から抜粋した原文urlです.https://blog.csdn.net/mhl29/article/details/51406834
具体コード:public class TestMain{
//01000001=41//00110110=36//01100110=66//01100110=66
}
具体コード:public class TestMain{
public static void main(String[] args) {
Float f = 11.4f;
String s = floatToIEEE754(f);
System.out.println(s);
// 8 16
//01000001=41//00110110=36//01100110=66//01100110=66
}
/**
* float IEEE754
* @param value
* @return
*/
public static String floatToIEEE754(float value) {
//
String sflag = value > 0 ? "0" : "1";
//
int fz = (int) Math.floor(value);
//
String fzb = Integer.toBinaryString(fz);
// , : 0.02
String valueStr = String.valueOf(value);
String fxStr = "0" + valueStr.substring(valueStr.indexOf("."));
float fx = Float.parseFloat(fxStr);
//
String fxb = toBin(fx);
//
String e = Integer.toBinaryString(127 + fzb.length() - 1);
//
String m = fzb.substring(1) + fxb;
String result = sflag + e + m;
while (result.length() < 32) {
result += "0";
}
if (result.length() > 32) {
result = result.substring(0, 32);
}
return result;
}
private static String toBin(float f) {
List list = new ArrayList();
Set set = new HashSet();
int MAX = 24; // 8
int bits = 0;
while (true) {
f = calc(f, set, list);
bits++;
if (f == -1 || bits >= MAX)
break;
}
String result = "";
for (Integer i : list) {
result += i;
}
return result;
}
private static float calc(float f, Set set, List list) {
if (f == 0 || set.contains(f))
return -1;
float t = f * 2;
if (t >= 1) {
list.add(1);
return t - 1;
} else {
list.add(0);
return t;
}
}
}