① 求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,转型不会影响精度。