<>二进制:

<>回顾:

* 正则表达式:
* 描述字符串内容格式的,通常用它来匹配字符串内容是否符合要求
* 正则表达式语法--------------了解
* 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进制数!

*
代码演示:
public class Demo01 { public static void main(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; //110010 System.out.println(
Integer.toBinaryString(n)); //2进制 n++; //110011 System.out.println(n); //10进制
System.out.println(Integer.toBinaryString(n)); //2进制 } }
<>什么是16进制

* 逢16进1的计数规则
* 因为2进制的书写太繁琐麻烦00000000 00000000 00000000 00110010 所以常常用16进制来缩写2进制数字
* 怎么缩写:将2进制从最低位开始,每4位2进制缩写为1位16进制
* 代码演示:public class Demo02 { public static void main(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 1 int 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 = -1
11111111111111111111111111111101 = -1-2 = -3 11111111111111111111111111111001 =
-1-2-4 = -7 11111111111111111111111110010111 = -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. -98 B.-99 C.-100 D.-101
System.out.println(~-100+1); 上述代码的运算结果是(C) 注:求-100的补码 A.98 B.99 C.100 D.101
<>位运算
~ 取反 & 与运算 | 或运算 >>> 右移位运算 << 左移位运算 <>& 与运算
*
基本规则:有0则0
0 & 0 = 0 0 & 1 = 0 1 & 0 = 0 1 & 1 = 1
*
运算的时候将两个数字对齐,将对应位进行与运算
权 8421 6 1 4 f 7 b b b n = 01100001 01001111 01111011 10111011 m = 00000000
00000000 00000000 11111111 0xff k = n&m 00000000 00000000 00000000 10111011
上述代码的用途:

* 将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则10 | 0 = 0 0 | 1 = 1 1 | 0 = 1 1 | 1 = 1
* 运算的时候将两个数位对齐,对应的位进行或运算权 8421 n = 00000000 00000000 00000000 10111001 0xb9 m
= 00000000 00000000 10111101 00000000 0xbd00 k = 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 8 n = 01100111 10011111
00011101 10011000 m = n>>>1 001100111 10011111 00011101 1001100 k = n>>>2
0001100111 10011111 00011101 100110 g = 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 e n = 01011110 01001110
00001101 11101110 m = n<<1 1011110 01001110 00001101 111011100 k = 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); //10 System.out.println(n<<2); //20 System
.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.-98 B:-99 C:-100
D:-101 System.out.println(~-100+1); 前面代码的运算结果是(C): 注:求-100的补码 A.98 B:99 C:100 D:
101
*
位运算:

* ~:取反(0变1、1变0)
* &:与运算(有0则0)
* |:或运算(有1则1)
*
:右移位运算

* <<:左移位运算
<>补充:

* 必须掌握的:
* 什么是2进制
* 什么是16进制、16进制存在的原因
* 2进制与16进制之间的换算 权: 64 32 16 8 4 2 1 1 1 0 0 1 0 0 = 100 右移位 1 1 0 0 1 0 = 50 1
1 0 0 1 = 25 1 1 0 0 = 12 权: 64 32 16 8 4 2 1 n 0 1 0 1 = 5 m 0 1 0 1 = 10 k 0 1
0 1 = 20 int n = 5; int m = n<<2; System.out.println(m); //20

技术
©2019-2020 Toolsou All rights reserved,
Python学习笔记(一)Linux【shell】 shell编程创建一个线程——— Javaweb (3)evo工具使用问题——Degenerate covariance rank, Umeyama alignment is not possibleVMware 16安装centos 7详细教程C语言做一个简易的登陆验证(功能)界面C语言——qsort函数Spring Boot面试必问:自动配置原理Android EditText密码显示隐藏Qt入门教程【基础控件篇】QCalendarWidget日历控件