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 == 0 13 /** 14 a变量的值10,它对应的二进制形式为: 15 00000000 00000000 00000000 00001010 16 a变量的值20,它对应的二进制形式为: 17 00000000 00000000 00000000 00010100 18 按位与& 19 -------------------------------------------- 20 00000000 00000000 00000000 00000000 21 */ 22 23 24 c = a | b; 25 /** 26 a变量的值10,它对应的二进制形式为: 27 00000000 00000000 00000000 00001010 28 a变量的值20,它对应的二进制形式为: 29 00000000 00000000 00000000 00010100 30 按位或| 31 -------------------------------------------- 32 00000000 00000000 00000000 00011110 33 */ 34 System.out.println("c==" + c); //c == 30 35 36 c = a ^ b; 37 /** 38 a变量的值10,它对应的二进制形式为: 39 00000000 00000000 00000000 00001010 40 a变量的值20,它对应的二进制形式为: 41 00000000 00000000 00000000 00010100 42 按位异或^ 43 -------------------------------------------- 44 00000000 00000000 00000000 00011110 45 */ 46 System.out.println("c==" + c); //c == 30 47 48 49 c = ~a; 50 /** 51 a变量的值10,它对应的二进制形式为: 52 00000000 00000000 00000000 00001010 53 按位取反(~) 54 -------------------------------------------- 55 11111111 11111111 11111111 11110101 56 */ 57 System.out.println("c==" + c); c == -11 58 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 = 30 15 y = x - y; //y = 10 16 x = x - y; //x = 20 17 System.out.println("x== " + x + ",y== " + y); 18 19 20 //方法二: 21 x = 10; 22 y = 20; 23 x = x ^ y; //x == 30 24 y = x ^ y; //y == 10 25 x = x ^ y; //x == 20 26 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 }