虽然应用场景不多,但是一些源码里却出现了很多次。并非没有用。
在计算机中,所有数值都是 二进制数值。
```byte 1个字节 8位short 2个字节 16位int 4个字节long 8个字节float 4个字节double 8个字节char 1个字节boolean 1位
```
## 操作对象数值在计算机中所有数都是以补码形式存储,正数最高位 0,负数最高位 1,正数三码合一,负数原码、反码、补码 分别应:对应正数最高位变1、最高位外 所有位取反、补(加)1
### 原码一个数字转换成二进制就是它的原码,如:
```int a=5;//0000 0000 0000 0000//0000 0000 0000 0101 -5 即在 5最高位用1//1000 0000 0000 0000//0000 0000 0000 0101
```
### 反码分两种情况,正数反码即是原码,负数是 符号位不变的基础上 其他位取反。
### 补码也分两种情况,正数补码即原码,负数补码是 反码加1。
负数补码==对应正数全部取反+1;
## 操作符
& 与运算符
从低到高对应,都是1 则是 1,其他都是 0
| 或运算符
有一个1 就是 1,否则 0
~ 取反
对每一位进行操作,1变 0 ,0 变1
^ 异或运算符
两个操作位 不一样是 1,一样是 0
>> 右移运算符
a>>b将数值a的二进制数 向右 移 b位,高位空出来的补零
>>有符号右移 //补码右移,正数补0,负数补1
如 -4>>2
4:前面0都是100
-4:011+1==前面1都是100
右移两位:(1)(1)前面1都是1==1111111111111111111就是数字1啊啊啊 记住这guo东西 负数补码==对应正数全部取反+1;
>>>无符号右移 无论正负数,最高位是1,0都是补0 负数补码补0、正数补码即原码
a/2^b