① 求java中BYTE[] 轉 FLOAT 代碼
這段代碼沒有錯,可能是你對float理解錯了。
關於float的一些資料:
float規格化表示
java中的浮點數採用的事IEEE Standard 754 Floating Point Numbers標准,該標準的規范可以參考http://blog.csdn.net/treeroot/articles/94752.aspx.
float佔用4個位元組,和int是一樣,也就是32bit.
第1個bit表示符號,0表示正數,1表示負數,這個很好理解,不用多管.
第2-9個bit表示指數,一共8為(可以表示0-255),這里的底數是2,為了同時表示正數和負數,這里要減去127的偏移量.這樣的話范圍就是(-127到128),另外全0和全1作為特殊處理,所以直接表示-126到127.
剩下的23位表示小數部分,這里23位表示了24位的數字,因為有一個默認的前導1(只有二進制才有這個特性).
最後結果是:(-1)^(sign) * 1.f * 2^(exponent)
這里:sign是符號位,f是23bit的小數部分,exponent是指數部分,最後表示範圍是(因為正負數是對稱的,這里只關心正數)
2^(-126) ~~ 2(1-2^(-24)) * 2^127
這個還不是float的取值范圍,因為標准中還規定了非規格化表示法,另外還有一些特殊規定.
非規格化表示:
當指數部分全0而且小數部分不全0時表示的是非規格化的浮點數,因為這里默認沒有前導1,而是0.
② java 變數數據類型轉換byte, short, char, int, long, float, double
整數類型可以這樣砍去多餘的位元組,但是在浮點型中有一個小數點,就是這個小數點導致浮點類型不能像整型一樣進行轉換。再多的就不知道了
^_^
③ Java中幾種常用數據類型之間轉換的方法
下面給你例舉10種Java中幾種常用的數據類型之間轉換方法:
1. short-->int 轉換
exp: short shortvar=0;
int intvar=0;
shortvar= (short) intvar
2. int-->short 轉換
exp: short shortvar=0;
int intvar=0;
intvar=shortvar;
3. int->String 轉換
exp: int intvar=1;
String stringvar;
Stringvar=string.valueOf (intvar);
4. float->String 轉換
exp: float floatvar=9.99f;
String stringvar;
Stringvar=String.valueOf (floatvar);
5. double->String 轉換
exp double doublevar=99999999.99;
String stringvar;
Stringvar=String.valueOf (doublevar);
6. char->String 轉換
exp char charvar=』a』;
String stringvar;
Stringvar=String.valueOf (charvar);
7 String->int、float、long、double 轉換
Exp String intstring=」10」;
String floatstring=」10.1f」;
String longstring=」99999999」;
String doubleString=」99999999.9」;
Int I=Integer.parseInt (intstring);
Float f= Integer.parseInt (floatstring);
Long lo=long. parseInt (longstring);
Double d=double. parseInt (doublestring);
8 String->byte、short 轉換
Exp String s=」0」;
Byte b=Integer.intValue(s);
Short sh=Integer.intValue(s);
9 String->char 轉換
Exp String s=」abc」;
Char a=s.charAt(0);
返回字元a
10 String-->boolean 轉換
String s=」true」;
Boolean flag=Boolean.valueOf (「s」);
④ Java中把byte類型轉換成float類型時,為什麼會影響數據的精度
理論上不會影響精度。
float的最大正有限值為:0x7f7fffff
而byte為1位元組的int,轉型不會影響精度。