栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java零基础学习019-API基础和二进制第三天

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java零基础学习019-API基础和二进制第三天

二进制: 回顾:
  1. 正则表达式:描述字符串内容格式的,通常用它来匹配字符串内容是否符合格式要求

  2. String支持正则表达式的三个方法:

    • matches():检查是否匹配
    • split():拆分
    • replaceAll():替换
  3. Object:所有类的鼻祖,所有类都直接或间接继承了Object

    ​ 其中有两个方法经常被重写: toString()和equals()

  4. 包装类:8种,为了解决基本类型不能直接参与面向对象开发的问题、自动拆装箱特性,允许基本类型与包装类之间直接赋值,底层将会自动补充代码

笔记:
  1. 什么是2进制:逢2进1的计数规则,计算机中的变量/常量都是按照2进制来运算的

    • 2进制:

      • 规则:逢2进1
      • 数字:0 1
      • 基数:2
      • 权: 128 64 32 16 8 4 2 1
    • 如何将2进制转换为10进制:

      • 将一个2进制数每个1位置的权相加即可-------------正数

        权:   32   16   8   4   2  1
        二进制:1    0    1   1   0  1
        十进制:32+8+4+1=45
        
        int n = 45; //编译时被编译为:101101
        System.out.println(Integer.toBinaryString(n)); //以2进制输出
        System.out.println(n); //以10进制输出
        
        n++; //将101101增1----101110
        System.out.println(Integer.toBinaryString(n)); //101110
        System.out.println(n); //46
        
  2. 什么是16进制:逢16进1的计数规则

    • 16进制:

      • 规则:逢16进1
      • 数字:0 1 2 3 4 5 6 7 8 9 a b c d e f
      • 基数:16
      • 权:4096 256 16 1
    • 用途:因为2进制书写太麻烦,所以常常用16进制来缩写2进制数字

    • 如何缩写:将2进制从最低位开始,每4位2进制缩写为1位16进制

      权:          8   4   2   1
      - 2进制:100 1111 0000 0101 0111 1010 1111 1110
      - 16进制:4    f    0    5    7    a    f    e--------4f057afe
      
      - 2进制:0110 0101 1100 1010 1110 1011
      - 16进制:  6    5    c    a    e    b-----------------65caeb
      
      int n = 0x4f057afe; //0x表示16进制
      int m = 0b100_1111_0000_0101_0111_1010_1111_1110; //0b表示2进制
      System.out.println(Integer.toBinaryString(n)); //按2进制输出
      System.out.println(Integer.toBinaryString(m));
      System.out.println(n); //按10进制输出
      System.out.println(m);
      
      //小面试题:(8进制平时不用)
      int x = 067; //以0开头表示8进制(068编译错误,因为8进制最大能出现的是7)
      System.out.println(x); //以10进制输出(6个8加上7个1--55)
      
  3. 补码:-------------------了解

    • 计算机中处理有符号数(正负数)的一种编码方式,java中的补码最小类型是int,32位数

    • 以4位2进制为例讲解补码的编码规则:

      • 计算的时候如果超出4位数则高位自动溢出舍弃,保持4位数不变
      • 将4位2进制数分一半作为负数使用
      • 最高位称为符号位,高位为1是负数,高位为0是正数
    • 规律数:------最大值、最小值、-1

      • 0111为4位补码的最大值,规律是1个0和3个1,可以推导出:

        —32位补码的最大值是:1个0和31个1-----(01111111…)

      • 1000为4位补码的最小值,规律是1个1和3个0,可以推导出:

        —32位补码的最小值是:1个1和31个0-----(10000000…)

      • 1111为4位补码的-1,规律是4个1,可以推导出:

        —32位补码的-1是:32个1---------------------(111111111…)

      int max = Integer.MAX_VALUE; //int最大值
      int min = Integer.MIN_VALUE; //int最小值
      System.out.println(Integer.toBinaryString(max)); //显示时高位0省略了
      System.out.println(Integer.toBinaryString(min)); //1000000....
      System.out.println(Integer.toBinaryString(-1)); //11111111....
      
    • 深入理解负值:

      • 记住32位二进制数-1的编码是32个1

      • 负值:用-1减去0位置对应的权值

        11111111111111111111111111111111 = -1
        11111111111111111111111111111101 = -1-2=-3
        11111111111111111111111111111001 = -1-2-4=-7
        11111111111111111111111111111000 = -1-1-2-4=-8
        11111111111111111111111101101011 = -1-4-16-128=-149
        11111111111111111111111101101100 = -1-1-2-16-128=-148 
        
        int n = -148;
        System.out.println(Integer.toBinaryString(n));
        
    • 互补对称现象:-n = ~n+1 --------取反+1 了解即可

      -7    = 11111111 11111111 11111111 11111001 = -1-2-4=-7
      ~-7   = 00000000 00000000 00000000 00000110 = 2+4=6
      ~-7+1 = 00000000 00000000 00000000 00000111 = 1+2+4=7
          
      5    = 00000000 00000000 00000000 00000101 = 1+4=5
      ~5   = 11111111 11111111 11111111 11111010 = -1-1-4=-6
      ~5+1 = 11111111 11111111 11111111 11111011 = -1-4=-5
      
      12    = 00000000 00000000 00000000 00001100 = 4+8=12
      ~12   = 11111111 11111111 11111111 11110011 = -1-4-8=-13
      ~12+1 = 11111111 11111111 11111111 11110100 = -1-1-2-8=-12
      
      //互补对称现象: -n=~n+1
      int n = -7;
      int m = ~n+1;
      System.out.println(m); //7
      
      int i = 12;
      int j = ~i+1;
      System.out.println(j); //-12
      
  4. 位运算:

    • 取反~:0变1、1变0

    • 与运算&:

      • 逻辑乘法,有0则0

        0 & 0 -----> 0
        0 & 1 -----> 0
        1 & 0 -----> 0
        1 & 1 -----> 1
        

        示例:

                    1   7    9   d    5   d    9   e 
        n =      00010111 10011101 01011101 10011110
        m =      00000000 00000000 00000000 11111111  0xff 8位掩码
        k = n&m  00000000 00000000 00000000 10011110
                        
        int n = 0x179d5d9e;
        int m = 0xff; //8位掩码
        int k = n&m;
        System.out.println(Integer.toBinaryString(n));
        System.out.println(Integer.toBinaryString(m));
        System.out.println(Integer.toBinaryString(k));
        

        如上运算的意义:k中存储的是n的最后8位,如上运算叫掩码运算。一般从低位开始1的个数称为掩码的位数

    • 或运算|:

      • 逻辑加法,有1则1

        0 | 0 ------> 0
        0 | 1 ------> 1
        1 | 0 ------> 1
        1 | 1 ------> 1
        
      • 示例:

        n =    00000000 00000000 00000000 11011101  0xdd
        m =    00000000 00000000 10011101 00000000  0x9d00
        k=n|m  00000000 00000000 10011101 11011101  0x9ddd
        
        int n = 0xdd;
        int m = 0x9d00;
        int k = n|m; //将n和m错位合并
        System.out.println(Integer.toBinaryString(n));
        System.out.println(Integer.toBinaryString(m));
        System.out.println(Integer.toBinaryString(k));
        

        上述计算的意义:两个数的错位合并

    • 右移位运算>>>:

      • 运算规则:将2进制数整体向右移动,低位自动溢出舍弃,高位补0

                    6   7    d   7     8  f     6  d
        n =        01100111 11010111 10001111 01101101
        m = n>>>1  001100111 11010111 10001111 0110110
        k = n>>>2  0001100111 11010111 10001111 011011
        g = n>>>8  00000000 01100111 11010111 10001111
                        
        int n = 0x67d78f6d;
        int m = n>>>1;
        int k = n>>>2;
        int g = n>>>8;
        System.out.println(Integer.toBinaryString(n));
        System.out.println(Integer.toBinaryString(m));
        System.out.println(Integer.toBinaryString(k));
        System.out.println(Integer.toBinaryString(g));
        
    • 左移位运算<<:

      • 运算规则:将2进制数整体向左移动,高位自动溢出舍弃,低位补0

                    6   7    d   7     8  f     6  d
        n =        01100111 11010111 10001111 01101101
        m=n<<1     1100111 11010111 10001111 011011010
        k=n<<2     100111 11010111 10001111 0110110100
        g=n<<<8    11010111 10001111 01101101 00000000
                        
        int n = 0x2ad78f6d;
        int m = n<<1;
        int k = n<<2;
        int g = n<<8;
        System.out.println(Integer.toBinaryString(n));
        System.out.println(Integer.toBinaryString(m));
        System.out.println(Integer.toBinaryString(k));
        System.out.println(Integer.toBinaryString(g));
        
    • 移位运算的数学意义:

      int n = 5;
      int m = n<<1;
      int k = n<<2;
      System.out.println(m); //10
      System.out.println(k); //20
      
      
精华笔记: 纯底层内容,要求尽量多的吸收,能吸收就吸收,吸收不了的就先不用管
  1. 什么是2进制:逢2进1的计数规则,计算机中的变量/常量都是按照2进制来运算的

    • 2进制:
      • 规则:逢2进1
      • 数字:0 1
      • 基数:2
      • 权: 128 64 32 16 8 4 2 1
    • 如何将2进制转换为10进制:
      • 将一个2进制数每个1位置的权相加即可-------------正数
  2. 什么是16进制:逢16进1的计数规则

    • 16进制:
      • 规则:逢16进1
      • 数字:0 1 2 3 4 5 6 7 8 9 a b c d e f
      • 基数:16
      • 权:4096 256 16 1
    • 用途:因为2进制书写太麻烦,所以常常用16进制来缩写2进制数字
    • 如何缩写:将2进制从最低位开始,每4位2进制缩写为1位16进制
  3. 补码:-------------------了解

    • 计算机中处理有符号数(正负数)的一种编码方式,java中的补码最小类型是int,32位数

    • 以4位2进制为例讲解补码的编码规则:

      • 计算的时候如果超出4位数则高位自动溢出舍弃,保持4位数不变
      • 将4位2进制数分一半作为负数使用
      • 最高位称为符号位,高位为1是负数,高位为0是正数
    • 规律数:------最大值、最小值、-1

      • 0111为4位补码的最大值,规律是1个0和3个1,可以推导出:

        —32位补码的最大值是:1个0和31个1-----(01111111…)

      • 1000为4位补码的最小值,规律是1个1和3个0,可以推导出:

        —32位补码的最小值是:1个1和31个0-----(10000000…)

      • 1111为4位补码的-1,规律是4个1,可以推导出:

        —32位补码的-1是:32个1---------------------(111111111…)

    • 深入理解负值:

      • 记住32位二进制数-1的编码是32个1
      • 负值:用-1减去0位置对应的权值--------------负数
    • 互补对称现象:-n = ~n+1 --------取反+1 了解即可

  4. 位运算:

    • ~: 取反(0变1,1变)

    • &:与运算

      • 运算规则:逻辑乘法,有0则0
    • |:或运算

      • 运算规则:逻辑加法,有1则1
    • 右移位运算>>>:

      • 运算规则:将2进制数整体向右移动,低位自动溢出舍弃,高位补0
    • 左移位运算<<:

      • 左移位运算<<:

        • 运算规则:将2进制数整体向左移动,高位自动溢出舍弃,低位补0
补充:
  1. 必须掌握的:
    • 什么是2进制
    • 什么是16进制、16进制存在的原因
    • 2进制和16进制之间的换算

课上能听懂,但是写不出来---------------------------不需要重听

听不懂-------------------------------------------------------需要重听(建议从语言基础开始重听)

ASCII:美国标准编码(0到127----字母、数字、符号)

GBK:中国国标编码(包含ASCII、中文) 日本也有自己的编码格式

Unicode:世界通用的(包含ASCII、中文、日文、古埃及文…)

UTF:读写流都按UTF格式读写,对中文而言它有3个字节,

​ 其中有一个字节表示长度信息(按两个英文解,还是按一个中文解)

ab:传输的是对应的二进制--------01011011 01010101

接收到二进制后还需解码---------计算机就傻了,不知道将其当作两个英文解还是一个中文解

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/838671.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号