short类型与int类型转换,float类型与double类型转换

时间:2024-03-29 15:05:46

 1.问题背景

       在问题类型转换中,short a = 1;把int类型转为short类型推翻了转换类型中的,大转小的理论,其实不然。与float f = 3.4 中double float转为float 大转小报错,展开深入研究。

2.基本1.Java类型转换

Java类型转换分为自动转换和强制转换两种。

基本类型间的自动类型转换需要满足以下条件:

(1).转换双方的类型必须兼容,例如int和long类型就是兼容的,而int和boolean就是不兼容的。

(2).只能是"窄类型"向"宽类型"转换,也就是目标类型的数据表示范围要比源类型的数据表示范围要大。
byte-->short-->int-->long
float-->double

按照箭头可以实现自动类型转换,而如果是相反方向间的类型转换则需要强制类型转换.

2.数值常量默认类型

(1).Java中整型常量数值的默认类型是int类型,如果需要声明long类型的常量 ,需要在数值加上'l'或者'L'.
例如:int i = 3; 
long l = 3L;

(2).Java中的浮点型常量数值默认是double类型,如果要声明一个数值为float型,则需要在数值后面加上'f'或者'F'.
Float = 3.4是错误的 ,高级向低级转换用强转

Java类型转换分为自动转换和强制转换两种。

基本类型间的自动类型转换需要满足以下条件:

(1).转换双方的类型必须兼容,例如int和long类型就是兼容的,而int和boolean就是不兼容的。

(2).只能是"窄类型"向"宽类型"转换,也就是目标类型的数据表示范围要比源类型的数据表示范围要大。

byte-->short-->int-->long

float-->double                                             

按照箭头可以实现自动类型转换,而如果是相反方向间的类型转换则需要强制类型转换.

数值常量默认类型

(1).Java中整型常量数值的默认类型是int类型,如果需要声明long类型的常量 ,需要在数值加上'l'或者'L'.
例如:int i = 3; 
long l = 3L;

(2).Java中的浮点型常量数值默认是double类型,如果要声明一个数值为float型,则需要在数值后面加上'f'或者'F'.

Float = 3.4是错误的 ,高级向低级转换用强转

3.深入讨论short(byte) number = 1;中int类型能直接赋值为byte,short类型

short类型与int类型转换,float类型与double类型转换

现在才知道,原来是jvm实现的强转类型呀,好吧,这样就符合了 大到小 要用“强转”,jvm自己就进行转换了。

4.float与double float类型为啥就不可以转换呢

这就考虑到精度损失的问题,既然是精度损失,那么就要深入了解float二进制存储结构了

一个float4字节32位,分为三部分:符号位,指数位,尾数位。

(1)符号位 31位,为1或者0

(2)指数为23-30,8位表示

(3)尾数位也就是小数位,则为0-22

一个double float 8字节,64位,分为三部分:符号位,指数为,尾数位

(1)符号位63位,为1或者0

(2)指数为52-62位,11位表示

(3)尾数位小数位,0-51位表示

综上可知,在表示二进制小数点时候,会损失精度,造成转换报错。


short类型与int类型转换,float类型与double类型转换