-
正则表达式:描述字符串内容格式的,通常用它来匹配字符串内容是否符合格式要求
-
String支持正则表达式的三个方法:
- matches():检查是否匹配
- split():拆分
- replaceAll():替换
-
Object:所有类的鼻祖,所有类都直接或间接继承了Object
其中有两个方法经常被重写: toString()和equals()
-
包装类:8种,为了解决基本类型不能直接参与面向对象开发的问题、自动拆装箱特性,允许基本类型与包装类之间直接赋值,底层将会自动补充代码
-
什么是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
-
-
-
什么是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)
-
-
补码:-------------------了解
-
计算机中处理有符号数(正负数)的一种编码方式,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
-
-
位运算:
-
取反~: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
-
-
什么是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进制
- 16进制:
-
补码:-------------------了解
-
计算机中处理有符号数(正负数)的一种编码方式,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 了解即可
-
-
位运算:
-
~: 取反(0变1,1变)
-
&:与运算
- 运算规则:逻辑乘法,有0则0
-
|:或运算
- 运算规则:逻辑加法,有1则1
-
右移位运算>>>:
- 运算规则:将2进制数整体向右移动,低位自动溢出舍弃,高位补0
-
左移位运算<<:
-
左移位运算<<:
- 运算规则:将2进制数整体向左移动,高位自动溢出舍弃,低位补0
-
-
- 必须掌握的:
- 什么是2进制
- 什么是16进制、16进制存在的原因
- 2进制和16进制之间的换算
课上能听懂,但是写不出来---------------------------不需要重听
听不懂-------------------------------------------------------需要重听(建议从语言基础开始重听)
ASCII:美国标准编码(0到127----字母、数字、符号)
GBK:中国国标编码(包含ASCII、中文) 日本也有自己的编码格式
Unicode:世界通用的(包含ASCII、中文、日文、古埃及文…)
UTF:读写流都按UTF格式读写,对中文而言它有3个字节,
其中有一个字节表示长度信息(按两个英文解,还是按一个中文解)
ab:传输的是对应的二进制--------01011011 01010101
接收到二进制后还需解码---------计算机就傻了,不知道将其当作两个英文解还是一个中文解



