在说到位运算之前我们先说一下我们的进制, 我们的的10进制逢10进1,只有0-9.二进制逢2进1,只有0和1.。
原码:原码是给我们看的,我们可以根据原码计算。
反码:原码转换到补码需要的一个过程。
补码:给计算机计算的,我们看的是原码。
位运算需要注意的规则:
整数的三个码都是一样的,不需要进行转换。
负数的三个码不一样,需要进行转换。
在计算机中参与计算的是补码。
最左边的哪一位数字是最高的,也是符号位,符号位分为0 和 1 , 0为整数,1为负数。
2-3 //计算2和-3 二进制
0 0 0 0 0 0 1 0 二的原码
1 0 0 0 0 0 1 1 -3的原码
1 1 1 1 1 1 0 0 -3的反码
1 1 1 1 1 1 0 1 -3的补码
-------------------------
0 0 0 0 0 0 1 0 二的原码
1 1 1 1 1 1 0 1 -3的补码
1 1 1 1 1 1 1 1 补码的结果
1 1 1 1 1 1 1 0 结果的反码
1 0 0 0 0 0 0 1 结果的原码
1乘2的0次方=1 原码的结果 -1
算数右移和算数左移还有一个逻辑右移。没有逻辑左移。
位运算
1.按位与 &
两位都为1,结果为1
5&6
0 0 0 0 0 1 0 1
0 0 0 0 0 1 1 0
------------------
0 0 0 0 0 1 0 0
4&5
0 0 0 0 0 1 0 0
0 0 0 0 0 1 0 1
----------------
0 0 0 0 0 1 0 0
2.按位或 |
两位有一位为1,结果为1
5|6
0 0 0 0 0 1 0 1
0 0 0 0 0 1 1 0
------------------
0 0 0 0 0 1 1 1
4|5
0 0 0 0 0 1 0 0
0 0 0 0 0 1 0 1
----------------
0 0 0 0 0 1 0 1
3.按位异或 ^
一位为0,一位为1,结果才是1
5^6
0 0 0 0 0 1 0 1
0 0 0 0 0 1 1 0
------------------
0 0 0 0 0 0 1 1
4^5
0 0 0 0 0 1 0 0
0 0 0 0 0 1 0 1
----------------
0 0 0 0 0 0 0 1
4.按位取反 ~ 一元表达式
~3 正数按位取反=自身的负数-1
~-3 负数按位取反=自身的正数-1
复习书上的多线程
进程:
进程是系统运行程序的基本单位。
每一个进程都有自己独立的一块内存空间,一组系统资源。
每个进程的内部数据和状态都是完成独立的。
线程:
线程是进程中执行运算的最小单位,可完成一个独立的顺序控制流程。每个进程中至少建立一个线程(这个线程称为主线程)。
如果一个进程中同时运行多个线程,用来完成不同的工作,这就叫做多线程。
多线程的好处:
可以充分利用cpu的资源,提高了程序的性能。减少了造成响应过慢等现象,给用户带来良好的用户体验。
在java中实现多线程:
java提供了一个Thread类用于实现多线程。
看一下thread底层:
线程的状态:
线程的状态有五种:创建--就绪--运行--堵塞--死亡
堵塞状态也是分为有很多种情况。
线程中的同步方法:
synchronized修饰的方法可以实现线程同步。