package com.lovecoding.day04;


/**
 * @author WanJl
 * @version 1.0
 * @title Demo01
 * @description 进制
 * @create 2026/7/10
 */
public class Demo01 {
    /*
        电灯的开关说起
        计算机内部是有电子元件组成，最基本的单位就是 晶体管，我们现在使用的晶体管只有两种状态：
        通电： 高电压     1
        断电： 低电压     0
        如果要让晶体管标识10种状态 十进制，就需要10个不同的电压值 ---那么电路设计就会相当复杂。
        两种状态 开/关 最稳定 最可靠
        计算机使用二进制不是因为二进制高级，只是因为硬件只识别通电/断电
        二极管

        什么叫进制
        就是计数的规则：
        基数：有多少个不同的数字符号
        位权：每个数位代表的实际数值

        四种：
        二进制：    基数 2    数字符号：0 1                                Java中的写法-加前缀： 0b 或 0B
        八进制：    基数 8    数字符号：0 1 2 3 4 5 6 7                    Java中的写法-加前缀： 0
        十进制：    基数 10    数字符号：0 1 2 3 4 5 6 7 8 9               十进制正常写就可以
        十六进制：  基数 16    数字符号：0 1 2 3 4 5 6 7 8 9 A B C D E F    Java中的写法-加前缀：0x 或 0X

        编码： 把人能看懂的信息形式（十进制数、文本、图片、音频、视频） 按照一定的规则 转换为另一种形式（比如二进制数据）的过程。

        解码：编码的逆过程，把二进制数据 转换为 人能看懂的信息

        二进制（Binary）----计算机的语言
        二进制数据只有 0  和 1 两个数字，逢二进一
        1101    这个二进制数的含义：
        位       1         1       0       1
        位权     2^3=8    2^2=4  2^1=2   2^0=1        // 二进制数的位权是从右往左，右侧为最低位，左侧为最高位
        计算     1*8      1*4     0*2    1*1      //得到的结果相加，就得到的最终 的十进制数
        1101（二进制）=   1*8 + 1*4 + 0*2 + 1*1 = 13（十进制）

        1010    -->
        1*8+0*4+1*2+0*1 =   10

        八进制（Octal）---二进制的缩写
        八进制使用 0~7 共8个数字。逢八进一。
        八进制和二进制的对应关系：每 3 位二进制 对应 1 位八进制

        二进制： 001 101 111
        八进制：  1   5   7

        十进制 ---人用的数字
        0~9 逢十进一

        十六进制    二进制的缩写---4位一组
        十六进制 0~9 加 A~F  共16位数字，逢十六进一
            A~F对应的十进制数
            A   B   C   D   E   F
            10  11  12  13  14  15
        十六进制和二进制的对应关系：每 4 位二进制 对应 1 位十六进制

        二进制：    1101 1110 1010 0101
        十六进制：   D     E    A    5
        十六进制最常用的方式： 颜色的色值、内存地址、MAC地址（计算机硬件地址）、文件权限等等都是使用十六进制标识。
     */
    public static void main(String[] args) {
        int a=0b0101011;    //Java中二进制整数 加前缀 0b 或 0B
        System.out.println(a);  //Java会自动的转换成十进制输出
        int b=01234567;    //Java中八进制整数 加前缀 0 或 0
        System.out.println(b);
        int c=0x123AFEC9;  //Java中十六进制整数 加前缀 0x 或 0X
        System.out.println(c);

        /*
         0  1   2   3   4   5   6   7   8   9   10


         0  1   10  11  100


         */
    }

}
