1.数据类型分类 :
变量根据位置的分类:
2.自动类型转换(只涉及7种基本数据类型)
结论:当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型。
byte 、char 、short --> int --> long --> float --> double
特别的:当byte、char、short三种类型的变量做运算时,结果为int型
说明:此时的容量大小指的是,表示数的范围的大和小。比如:float容量要大于long的容量
强制类型转换
格式: 目标类型 变量名=(目标类型)(被转换的数据);
注意点:强制类型转换,可能导致精度损失。
强制类型转换所导致的精度缺失的原因分析:
public class DataTypeDemo6 {
public static void main(String[] args) {
//因为byte的范围是-128 - 127
//而130不在这个范围内,所以报错
byte b = (byte) 130;
//结果是多少呢?
System.out.println(b); //-126
}
}
分析:
我们想要知道结果是什么,就应该要知道是怎么计算的。
而我们又知道计算机中的数据运算都是以补码进行的。
而想要得到补码,首先要知道反码,想要知道反码,就要知道原码。
想要知道原码,就必须计算出数据二进制。
1、获取130这个数据的二进制(因为130为int型,而int型为4个字节,一个字节8位)
00000000 00000000 00000000 10000010
由于130是正数(最高位为符号位:0),所以这是130的原码,反码,补码都一样
2、做截取操作,截成byte类型的了(所谓的强制转换,其实就是强制截取,因byte最大只有1个字节,要想强制转换成功,只能从int型的4个字节中截取后8位)
10000010
这个结果是补码。(这里最高位不在是0了,是1,是个负数,要获得原码,就要再进行转换)
3、已知补码,求原码
符号位 数值位
补码: 1 0000010
反码: 1 0000001
原码: 1 1111110 ——> -126
所以int型的130被强制转换为byte型的结果为-126