1.默认转换
实心箭头,表示无信息丢失,虚箭头,表示可能有精度损失。
- 如果两个操作数中有一个是double,另一个会被转换成double
- 否则,如果其中一个操作数是float,另一个操作数将会转换成float
- 否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型
- 否则,两个操作数都会被转换成int类型。
2.强制转换
- 强制转换通过截断小数点将浮点值转换成整型
- 如果要四舍五入,要使用
Math.round(9.97);
,返回值是long。
思考题:下面两个定义有没有区别
float f1=(float)12.345;
float f2=12.345f;
有区别,f1是从double转换过来的,f2本身就是float类型。
思考题:
byte b1=3,b2=4,b;
1.b=b1+b2;
2.b=3+4;
1.报错,两个byte类型都会先转换成int,类型提升。
2.常量,先计算值,然后看是否在byte范围里,如果在就不报错。
变量在运行时才确定,而常量在编译时就确定
思考题:byte b=(byte)130
,结果是多少?
-
计算机中的数值计算都是通过补码进行的
130 : 00000000 00000000 00000000 10000010
这是130的原码,也是反码,还是补码。
做byte截取,8位:10000010
所以结果为-126
补充知识:
- 原码:最高为符号位,0表示正数,1表示负数
- 反码:正数的反码与原码相同,负数的反码符号位不变,数值位取反
- 补码:正数的补码与原码相同,负数的补码为反码+1
网友评论