1.数据排序:
byte short int long float double boolean char
2.自动类型转换:
小类转大类型。
3、强制类型转换:
1.double类型转int类型,存在精度丢失问题。
2.大类型转换为小类型。
3.存在溢出问题。
package day04;
public class DataTypeChange03 {
public static void main(String[] args) {
int a = 25;
// 报错 byte b = a;
byte b = (byte)a; //需要强制转换
int i = 1500;
byte j = (byte)i;
System.out.println(j);
}
}
上述代码打印j值计算过程发生溢出,使用强制转换得到正常j值:
〇、内存中怎么实现强制类型转换?
int a = 1500
转换成原码: 00000000 00000000 00000101 11011100
反码: 011111111 111111111 111111010 00100011
计算器内存保存补码: 011111111 111111111 111111010 00100100
byte b = (byte)a
由于 byte类型只有1字节: 00000000,强制转换会截断int类型a的数据,只保留最后8位
byte对应原码: 11011100
byte对应反码: 10100011
byte对应反码: 10100100
btye对应值: 36
一、转换对应规则:
int整数常量可直接赋给 byte short char ,但不能超过小类型范围。
byte short char参与运算,系统一律转换为int类型。
二、运算符
上图中, 2.0为小数double 范围大于int
运算过程中a b 值默认为int类型
m的值默认带有小数, 类型也应为较大范围的double。
如图,short来定义s会报错 因为运算过程 a b 默认为int类型
其值也为int类型
可以强制转换结果(short)(a+b)
也可以 int d
如上图会报错,因为0不能当分母,抛异常.ArithmeticException
如上图,不会抛异常,double 类型数据除double类型 0
计算结果为Infinity
当负 double类型数据除double类型0
计算结果为-Infinity
自增自减问题的计算。
&门 全真为真,否则为假
||门 有真为真
异或^门 全真为假
!非门 相反值
用异或门来改变 交换变量的值
a=a^b; //a=7
b=a^b; //b=4
a=a^b; //a=3