package pracrise1;
public class test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// int a =9999999999;// 会显示溢出,因为已经超出了int 型的最大范围
// byte , short ,char 三种比int 小的整数 ,可以用范围内的值直接赋值,即不超过自身范围的数都可以直接赋值
// byte a =127;
// byte b =128; //byte 最大为127,溢出,报错
// 浮点数的字面值类型是double
// float a =3.0; //显示报错,因为默认类型是double
// 字面值后缀
// int a =9999999999;// 会显示溢出,因为已经超出了int 型的最大范围,但如果还想用99999999这个整数怎么办呢?
//将数字转为long 型,数字后加上后缀 L(一般为大写,小写容易混淆)
// long a =9999999999; //注意,此时的9999999还是int型,所以还是会报错
// long a =9999999999L; //正确方式
// 同理
// float a =3.0; //显示报错,因为默认类型是double
// float a =3.0f; //f 或 F都可
// double a =3 ; //输出为3.0 ,因为3为int型,且没有超出int范围,所以可直接输出
// double a =99999999999d; //此时已超出int范围,所以要加上d,转为double类型,输出结果为99999999999.0
//进制前缀
// 0011 为避免误会,在二进制前面加上 0b 即 0b0011 表示二进制
// 076 八进制,在前面加上 0 ,即 0076 表示八进制
// 0863 十六进制 ,在前面加上 0x, 即0x0863 表示十六进制
// /在前面加上 \ u 表示char类型 ,如 \u0000/
//基本类型转换 Boolean 不参与
// char
// ↓
// byte → short → int → long
// ↓ ↘ ↙ ↓
// float double
// 从小到大 隐式转换 即可直接转换
// eg: byte a =10;
// int b =a;
// 从大到小 显示转换 需要强制转换
// int a =10;
// byte b= a; //报错 cannot convert from int to byte
// byte b =(byte) a; //需要在前面加上(强制转换后的类型)
// System.out.println(b); //10
// 特别的是,char 类型 和byte ,short 等类型进行转换,无论从谁到谁都需要强制转换
// char a =1;
// byte b =a; //报错
// short c =a; //报错
// int b = a; //可以,因为是从小到大,看上方转换关系图
// long b =a;
// System.out.println(b); //1
// double b =a; //也可以
// float b = a; //可以
//浮点数转换成整数时,小数部分舍弃
// double a =3.11;
// int b =(int ) a;
// System.out.println(b); //输出结果为3
// 运算规则
// 1.计算结果的数据类型,与最大类型一致
// System.out.println(5/2);//结果为2 因为5 和 2 都为int 型,最大类型也为 int 型,小数省略
// System.out.println(5.0/2); //结果为2.5 ,因为5.0 为double 型,所以最大类型为double型,结果也为double型
// 2.byte ,short,char 三种比int小的整数,运算时会先自动转成int型
// byte a =2;
// byte b =3;
// int c =a+b; //不显示报错,因为在运算时,已经转为了int型
// byte d =byte a + byte b ; //错误,因为a和b本身就是byte型,相加后还是int型
// byte d =(byte)(a+b); //正确
// byte a =2;
// short b=4;
// int c =a+b;//不报错,同理
//3.整数运算溢出
// 整数运算时,相当于一个时钟,最大值为12,当超过12时,又重新开始计算,比如14为2
// 例如 int 的最大值为2147483647 ,当为2147483648时,值为-2147483648,即int 的最小值
// System.out.println(2147483647 +1);
//为避免这种情况,根据运算规则1,将最大类型改为long型,将范围变得更大,可以解决这个问题
// System.out.println(2147483647 +1L); //结果为2147483648
// System.out.println(2147483647+1+2L);//结果为-2147483646 ,因为2147483647+1 的结果仍为int 型,此时已经超出范围,开始新的轮回,再加入2L后才变成long
// System.out.println(2147483647L+1+2);//结果为2147483650,因为 一开始2147483647L+1的运算中,就已经将结果转为long型了
// 4.浮点数计算不精确
// System.out.println(1-0.8); //结果为0.19999999999999996 解决方法后面学
// 5.浮点数的特殊值 Infinity 无穷大 ;NaN not a number 不是一个数
// System.out.println(3/0);//报错分母不能为0,此时为整数,
// System.out.println(3.0/0); //结果为Infinity
// System.out.println(0/0.0);//结果为NaN
}
}