位运算:用于2进制运算

System.out.print(6&3);
  110
&011
--------
  010
//  6&3  转换成2进制  0为false ,1为true   结果为2; 或运算只要是有效位都保留;
6^3  6异或3
转换为2进制
110
011
-----
101
4,2,1   1+4=5
5^3
101
011
-----
110  
4,2,1  4+2=6   结论一个数异或同一个数两次还是这个数;例6^3^3=6   可以用于加密处理中
System.out.println(~6); 取这个数的反码 ,实际为取反 0变1 1变0 ,取反加1 结果为-7 -7+1=-6
System.out.println(3<<2);
//3往左移2位  ,3为int型 所以是32位在内存中
0000-0000 0000-0000 0000-0000 0000-0011 
00-0000 0000-0000 0000-0000 0000-001100   左移2位结果
3<<2=12   3<<3=24
3*2(2)=12   3*2(3)=24 
结论实际上左移x就是乘以2的x次幂
6>>1
0000-0000 0000-0000 0000-0000 0000-0110
00000-0000 0000-0000 0000-0000 0000-011  6右移1位后
6>>2
000000-0000 0000-0000 0000-0000 0000-01  6右移2位后
结论实际上右移就是该数局除以2的几次幂
>>>  三个大于号右移与两个区别   数据进行右移时高位出现了空位,不论原高位是什么,空位否用0补
2*8=16;使用最快的方式算出2*8
// 最快方式就是移位 2*2(3)  2向左移3位   2<<3
运算过程  , 比较复杂
     0010
   *1000
   ----------
      0000
    0000 
  0000
0010
-------------
    10000
使用位运算 完成 两个整数变量交换数值
可以采用方式 
int a=3,b=5;
a=a+b;
b=a-b;
a=a-b;
虽然可以实现但是容易超出int范围
第二种方式 (位运算完成)
a=a^b;
b=a^b;
a=a^b;
通过位运算完成交换  面试常用
第三种方式
int c;
c=a;
a=b;
b=c;
开发时使用