一、自动类型转换
1.在java中,变量参与运算的时候会自动提升数据类型
byte,short,char -> int -> long -> float -> double
二、强制类型转换
1.语句格式:
目标数据类型 变量名=(目标数据类型)要转型的变量值或者表达式
public class DataTypeDemo2 {
public static void main(String[] args) {
//哪句是编译失败的呢?为什么呢?
// byte b1=3,b2=4,b; //不推荐这么定义
//工作的时候,推荐一个变量定义占用一行
byte b1=3;
byte b2=4;
byte b;
// b=b1+b2; // 如果是变量参与运算,会先自动类型转换,做完运算后,再判断是否可以进行赋值
//强制类型转换
b=(byte)(b1+b2);
System.out.println(b);
// b=3+4; // 如果是常量参与运算,会先进行运算,运算后,会判断结果是否在范围内,如果在直接赋值
}
}
2.注意事项:
使用可能会有风险,精度丢失
public class DataTypeDemo3 {
public static void main(String[] args) {
byte b = (byte)130; // 无法直接赋值,原因是130超过了byte的最大范围,需要强制类型转换
System.out.println(b); // -126
}
}
/*
计算机中的数据都是采用补码进行运算的
130的补码:00000000 00000000 00000000 10000010
做强制类型转换:
补码: (00000000 00000000 00000000) 10000010
补码: 10000010
已知补码求原码:
符号位 数值位
补码: 1 0000010
反码: 1 0000001
原码: 1 1111110
-----------------------------
64 + 32 + 16 + 8 + 4 + 2 = 126
因为符号位是1,所以最终的结果是-126
*/
标签:类型转换,java,运算,00000000,补码,b1,byte
From: https://www.cnblogs.com/ndmtzwdx/p/18475493