二进制:
回顾:
- 正则表达式: - 描述字符串内容格式的,通常用它来匹配字符串内容是否符合要求- 正则表达式语法--------------了解
- String中与正则表达式相关的方法: - matches():使用给定正则表达式来验证当前字符串内容是否符合要求,符合返回true,不符合返回false- split():将当前字符串按照满足正则表达式的部分进行拆分,拆分为字符串数组- replaceAll():将当前字符串中满足正则表达式的部分替换为指定字符串,返回替换后的字符串
- Object: - 鼻祖,所有类都直接或间接继承了Object,万物皆对象- 其中有两个经常被重写的方法:toString()和equals() - Object中的toString()返回的是类的全称@地址,没有参考意义,所以常常重写toString()返回咱们自己需求的数据- Object中的equals()比较的还是对象的地址,没有参考意义,所以常常重写equals()来比较对象的属性
- 包装类: - 8种包装类,为了解决基本数据类型不能参与面向对象开发的问题- JDK1.5推出:自动拆装箱特性,允许基本类型与包装类之间直接赋值,底层将会自动补充代码完成转换工作
笔记:
什么是2进制
- 逢二进一的计数规则
- 如何将2进制转换为10进制?- 将一个2进制数每个1位置的权值累加即可
- Java 所有的变量\常量存储的都是2进制数!
- 代码演示:
publicclassDemo01{publicstaticvoidmain(String[] args){/* 1.java在编译期间将10进制数编译为2进制数,按2进制来运算 .java(50) 编译后 .class(110010) 2.Integer.toBinaryString()可以将底层的2进制数显示出来 3.int类型是32位2进制数,显示2进制数时自动省略高位0 4.System.out.println()将2进制转换为10进制输出 */int n =50;//110010System.out.println(Integer.toBinaryString(n));//2进制 n++;//110011System.out.println(n);//10进制System.out.println(Integer.toBinaryString(n));//2进制}}
什么是16进制
- 逢16进1的计数规则
- 因为2进制的书写太繁琐麻烦
00000000000000000000000000110010
所以常常用16进制来缩写2进制数字 - 怎么缩写:将2进制从最低位开始,每4位2进制缩写为1位16进制
- 代码演示:
publicclassDemo02{publicstaticvoidmain(String[] args){/* 16进制:缩写2进制 1)0x是16进制字面量前缀,0x开头则编译器按照16进制编译 2)Java 7提供了2进制字面量前缀 0b----不用,一般都用16进制 */int n =0x4f057afe;//0x表示16进制int m =0b1001111000001010111101011111110;//0b表示二进制System.out.println(Integer.toBinaryString(n));//按2进制输出System.out.println(Integer.toBinaryString(m));//按2进制输出//结论:用16进制来表示2进制更方便/* 8进制: 1)逢8进1的计数规则 2)前缀0表示为8进制 3)数字:0,1,2,3,4,5,6,7,没有7以上的数字 *///----小面试题(8进制平时不用)//权 64 8 1int x =067;//0开头表示8进制System.out.println(x);//十进制的55(6个8加上7个1)}}
补码
- 计算机中处理有符号数(正负数)的一种编码方式,java中的补码最小类型是int,32位数
- 以4位2进制为例讲解补码的编码规则:- 计算的时候如果超出4位数就自动溢出舍弃,保持4位数不变- 将4位2进制数分一半作为负数使用- 最高位称为符号位,高位为1是负数,高位为0是正数
int n =-3;System.out.println(Integer.toBinaryString(n));/*规律数:1)0111为4位补码的最大值,规律是1个0和3个1,可以推导出: 32位补码的最大值,是1个0和31个1-----(011111111...)2)1000为4位补码的最小值,规律是1个1和3个0,可以推导出: 32位补码的最小值,是1个1和31个0-----(100000000...)3)1111为4位补码的-1,规律是4个1,可以推导出: 32位补码的-1是,是32个1------------(11111111...)*/int max =2147483647;//int的最大值int min =-2147483648;//int的最小值System.out.println(Integer.toBinaryString(max));//011111...System.out.println(Integer.toBinaryString(min));//100000...System.out.println(Integer.toBinaryString(-1));//11111...
- 深入理解负值:- 记住-1的编码是32个1- 用-1减去0位置对应的权值
11111111111111111111111111111111=-111111111111111111111111111111101=-1-2=-311111111111111111111111111111001=-1-2-4=-711111111111111111111111110010111=-1-8-32-64=-105
- 互补对称:- 公式:-n=
n+1 结论:一个数的补码=这个数取反+1- 举例说明:```int n =-3;int m =n+1;System.out.println(m);//3 -3的补码就是-3取反+1- 面试题:
System.out.println(100+1); 上述代码的运算结果是(C) 注:求100的补码A.-98B.-99C.-100D.-101System.out.println(-100+1); 上述代码的运算结果是(C) 注:求-100的补码A.98B.99C.100D.101```
位运算
~ 取反
& 与运算
| 或运算
>>> 右移位运算
<< 左移位运算
& 与运算
- 基本规则:有0则0
0&0=00&1=01&0=01&1=1
- 运算的时候将两个数字对齐,将对应位进行与运算
权 8421614 f 7 b b bn =01100001010011110111101110111011m =000000000000000000000000111111110xffk = n&m 00000000000000000000000010111011
上述代码的用途:- 将n的最后8位拆分出来,存储到k中- m数称为掩码,8个1称为8位掩码- 上述运算称为:掩码运算代码:int n =0x614f7bbb;int m =0xff;//掩码int k = n & m;//将n的最后8位数拆分出来,存储到k中System.out.println(Integer.toBinaryString(n));System.out.println(Integer.toBinaryString(m));System.out.println(Integer.toBinaryString(k));
| 或运算
- 基本规则:有1则1
0|0=00|1=11|0=11|1=1
- 运算的时候将两个数位对齐,对应的位进行或运算
权 8421n = 00000000 00000000 00000000 10111001 0xb9m = 00000000 00000000 10111101 00000000 0xbd00k = n|m 00000000 00000000 10111101 10111001
如上案例的意义:错位合并 代码:int n =0xb9;int m =0xbd00;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
权 8421 6 7 9 f 1 d 9 8n = 01100111 10011111 00011101 10011000m = n>>>1 001100111 10011111 00011101 1001100k = n>>>2 0001100111 10011111 00011101 100110g = n>>>8 00000000 01100111 10011111 00011101
- 代码:
int n =0x679f1d98;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
权 8421 5 e 4 e 0 d e en = 01011110 01001110 00001101 11101110m = n<<1 1011110 01001110 00001101 111011100k = n<<2 011110 01001110 00001101 1110111000
- 代码
int n =0x5e4e0dee;int m = n<<1;int k = n<<2;System.out.println(Integer.toBinaryString(n));System.out.println(Integer.toBinaryString(m));System.out.println(Integer.toBinaryString(k));
移位运算的数学意义
权 64 32 16 8 4 2 1
0 1 0 1 = 5 向左移动
0 1 0 1 = 10
0 1 0 1 = 20
0 1 0 1 = 40
左移位代码:自行编码验证
int n =5;System.out.println(n<<1);//10System.out.println(n<<2);//20System.out.println(n<<3);//40
右移位代码:自行编码验证
int n =100;System.out.println(n>>>1);//?System.out.println(n>>>2);//?System.out.println(n>>>3);//?
精华笔记:
纯底层内容,要求尽量多的吸收,能吸收多少就吸收多少,吸收不了的就放弃
- 什么是2进制:逢2进1的计数规则,计算机中的变量/常量都是按照2进制来运算的- 2进制: - 规则:逢2进1- 数字:0 1- 基数:2- 权:128 64 32 16 8 4 2 1- 如何将2进制转换为10进制: - 将一个2进制数每个1位置的权值相加即可----------正数
- 什么是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进制
- 补码:- 计算机中处理有符号数(正负数)的一种编码方式,java中的补码最小类型是int,32位数- 以4位2进制为例讲解补码的编码规则: - 计算的时候如果超出4位数就自动溢出舍弃,保持4位数不变- 将4位2进制数分一半作为负数使用- 最高位称为符号位,高位为1是负数,高位为0是正数- 深入理解负值: - 记住-1的编码是32个1- 负值:用-1减去0位置对应的权值- 互补对称: - 结论:一个数的补码=这个数取反+1(取反+1) 公式: -n=
n+1 6的补码=6取反+1 -3的补码=-3取反+1- 面试题:```System.out.println(100+1); 前面代码的运算结果是(C):注:求100的补码A.-98B:-99C:-100D:-101System.out.println(~-100+1); 前面代码的运算结果是(C): 注:求-100的补码A.98B:99C:100D:101``` - 位运算:- ~:取反(0变1、1变0)- &:与运算(有0则0)- |:或运算(有1则1)- > > > :右移位运算- <<:左移位运算
补充:
- 必须掌握的: - 什么是2进制- 什么是16进制、16进制存在的原因- 2进制与16进制之间的换算
权:64321684211100100=100 右移位
110010=5011001=251100=12
权:6432168421
n 0101=5
m 0101=10
k 0101=20int n =5;int m = n<<2;System.out.println(m);//20
标签:
java
本文转载自: https://blog.csdn.net/jason13579/article/details/123702164
版权归原作者 王克晶WKJ 所有, 如有侵权,请联系我们删除。
版权归原作者 王克晶WKJ 所有, 如有侵权,请联系我们删除。