Java基础-位运算符Bitwise Operators
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.位运算特点
位运算符分为按位与(&),按位或(|),按位异或(^),按位取反(~)。
位运算存在以下特点:
1>.如果&|^两侧为布尔值,就是逻辑操作
如果两侧为整数就是按位操作
2>.位运算就是对整数的二进制位进行运算
a>.1 & 1 == 1
b>.0 | 0 == 0
c>.1 ^ 1 == 1
d>.1 ^ 1 == 1
e>.~1 == 0
f>.~0 == 1
二.案例展示
1.用法展示
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class bitwise{ 8 public static void main(String[] args){ 9 int a = 10;10 int b = 20;11 int c = a & b;12 System.out.println("c==" + c); //c == 013 /**14 a变量的值10,它对应的二进制形式为:15 00000000 00000000 00000000 0000101016 a变量的值20,它对应的二进制形式为:17 00000000 00000000 00000000 0001010018 按位与&19 --------------------------------------------20 00000000 00000000 00000000 0000000021 */22 23 24 c = a | b;25 /**26 a变量的值10,它对应的二进制形式为:27 00000000 00000000 00000000 0000101028 a变量的值20,它对应的二进制形式为:29 00000000 00000000 00000000 0001010030 按位或|31 --------------------------------------------32 00000000 00000000 00000000 0001111033 */34 System.out.println("c==" + c); //c == 3035 36 c = a ^ b;37 /**38 a变量的值10,它对应的二进制形式为:39 00000000 00000000 00000000 0000101040 a变量的值20,它对应的二进制形式为:41 00000000 00000000 00000000 0001010042 按位异或^43 --------------------------------------------44 00000000 00000000 00000000 0001111045 */46 System.out.println("c==" + c); //c == 3047 48 49 c = ~a;50 /**51 a变量的值10,它对应的二进制形式为:52 00000000 00000000 00000000 0000101053 按位取反(~)54 --------------------------------------------55 11111111 11111111 11111111 1111010156 */57 System.out.println("c==" + c); c == -1158 59 60 }61 }
2.面试题来袭
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 public class bitwise{ 8 public static void main(String[] args){ 9 //如果实现两个数的原地交换,不借助与第三个变量,实现两个数的交换10 int x = 10;11 int y = 20;12 13 //方案一:14 x = x + y; //x = 3015 y = x - y; //y = 1016 x = x - y; //x = 2017 System.out.println("x== " + x + ",y== " + y);18 19 20 //方法二:21 x = 10;22 y = 20;23 x = x ^ y; //x == 3024 y = x ^ y; //y == 1025 x = x ^ y; //x == 2026 System.out.println("x== " + x + ",y== " + y);27 28 29 //实际应用中,实现两个数的交换,建议使用以下方法,方便其它程序员可以读懂30 x = 10;31 y = 20;32 int temp = x ;33 x = y;34 y = temp;35 36 System.out.println("x== " + x + ",y== " + y);37 38 }39 }