位运算:用于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; 开发时使用