/**
 * @author WanJl
 * @version 1.0
 * @title Demo05
 * @description 基本数据类型的转换
 * @create 2026/7/13
 */
public class Demo05 {
    public static void main(String[] args) {
        /*
        自动转换
            可以把表示范围小的类型的变量直接转换为表示范围大类型的变量，可以自动转换
            byte -> short -> int -> long -> float ->double
         */
        byte a=120;
        short b=a;  //byte -> short
        int c=b;    //short -> int
        long d=c;   //int -> long
        float f=d;  //long -> float
        double dd=f;    //float ->double
        // 以上都可以自动转换，比如有一瓶 500ml 的水，倒进 1L的瓶子里，是完全可以装得下。

        /*
        强制转换
            表示范围大的类型的值，转换给表示范围小的类型的变量，就需要强制转换。
                因为 转换的时候，可能会出现两种情况：
                    |-1、能装得下：1L瓶 里面有300ml水，倒进 500ml的瓶子里。
                    |-2、装不下：1L瓶 里面有600ml水，倒进 500ml的瓶子里。就会丢失数据
                所以，强制类型转换的时候，有可能会丢失精度。
             强制转换运算符

             目标类型 变量名2=(目标类型)变量1;
         */
        double pi=3.94;
        int n=(int)pi;  // double -> int    小数转整数，直接截断小数
        System.out.println(n);  // n是3，会丢失精度，直接截断小数，不是四舍五入

        int n2=128;
        byte b2=(byte)n2; // int -> byte   byte类型的最大值 127
        System.out.println(b2);
        /*
            转换过程：
            1、int 的 128（十进制） 转换为 32位二进制的128-->
             0000 0000 0000 0000 0000 0000 1000 0000
            2、转换成byte类型（8位）的二进制数，直接砍掉高位，从左边砍掉24位
             1000 0000
             注意：二进制数中，最左边的是最高位，也叫符号位，符号位为0，那么这个二进制数就是正数，如果是1，就是负数
            3、把 8位二进制数 1000 0000 转换为十进制数 就是 -128
         */
    }


}
