java位运算符
| 位于算符 | 符号解释 | 
|---|---|
| & | 按位与 当两位同为1时返回1 | 
| | | 按位或,只要有一位为1即返回1 | 
| ~ | 按位非,将操作数每个位(包括符号位,全部取反) | 
| ^ | 按位异或 两位相同时返回0,不相同时返回1 | 
| << | 左移运算符 | 
| >> | 右移运算符 | 
符号的介绍:
- &(与) -> 有假则假
- |(或) -> 有真则真
- ~(非) -> 取反
- ^(异或) -> 符号前后结果一样为false,不一样为true
true ^ true -> false
false ^ false -> false
true ^ false -> true
false ^ true -> true
1代表true 0代表false
我们要知道计算机在存储数据的时候都是存储的数据的补码,计算也是用的数据的补码
 但是我们最终看到的结果是原码换算出来的
原码 反码 补码
正数二进制最高位为0; 负数二进制最高位为1
如果是正数 原码 反码 补码 一致
 比如:5的原码 反码 补码一致:
0000 0000 0000 0000 0000 0000 0000 0101 -> 因为是正数,二进制最高位为0
如果是负数,原码 反码 补码不一样了
 反码是原码的基础上最高位不变,剩下的0和1互换
 补码是在反码的基础上+1
比如:-9
原码: 1000 0000 0000 0000 0000 0000 0000 1001
反码: 1111 1111 1111 1111 1111 1111 1111 0110
补码: 1111 1111 1111 1111 1111 1111 1111 0111
左移:<<
运算规则:左移几位就相当于乘以2的几次方
注意当左移的位数n超过该数据类型的总位数时,相当于左移(n-总位数)位
2<<2   //结果等于8
//快速算法:  2*(2的2次方)

-2<<2  等于-8
快速算法: -2*(2的2次方)

右移:>>
快速运算:类似于除以2的n次,如果不能整除,向下取整
9>>2  //等于2
    
//快速算法: 9除以(2的2次方)

-9>>2   //等于-3
    
//快速算法: -9除以(2的2次方)

无符号右移:>>>
运算规则:往右移动后,左边空出来的位直接补0,不管最高位是0还是1空出来的都拿0补
正数:和右移一样
9>>>2 //等于2
负数:右边移出去几位,左边补几个0,结果变为正数
-9>>>2
//结果为:1073741821  
按位与:&
小技巧:将0看成为false 将1看成true
运算规则:对应位都是1才为1,相当于符号左右两边都为true,结果才为true
-  1&1 结果为1 
-  1&0 结果为0 
-  0&1 结果为0 
-  0&0 结果为0 
5&3 //结果1

按位或:|
运算规则:对应位只要有1即为1,相当于符号前后只要有一个为true,结果就是true
-  1|1 结果1 
-  1|0 结果1 
-  0|1 结果1 
-  0|0 结果0 
5|3    //结果为7

按位异或:^
 运算规则:对应位一样的为0,不一样的为1
-  1^1 结果为0 false 
-  1^0 结果为1 true 
-  0^1 结果为1 true 
-  0^0 结果0 false 
5^3   //结果为6

按位取反
运算规则:~0就是1
 ~1就是0
~10   //结果为-11

运算符的优先级




















