1 public class BitOperation { 2 3 //对两个输入参数做加法运算,但是不能使用 “+” 运算符 4 //先通过异或塞选出不用进位的情况,然后再用与运算和左移运算计算出进位的情况,迭代更新出最后的结果 5 public static int plus(int a, int b) { 6 int aTemp = 0, bTemp = 0; 7 8 while (b != 0) { 9 aTemp = a ^ b; 10 bTemp = (a & b) << 1; 11 a = aTemp; 12 b = bTemp; 13 } 14 return a; 15 } 16 17 //不创建临时变量的情况下进行交换两个数 18 public static void swap(int a, int b) { 19 a ^= b; // a 中存放两数互异的点位 20 b ^= a; // 取反 b 中不同于 a 的点位,也就是实现了 b = a 21 a ^= b; // 取反 a 中不同于 b 的点位,也就是实现了 a = b 22 23 System.out.println(a + " "+ b); 24 } 25 26 //把 A 转换成 B ,需要改变多少位? 27 //两个数做异或的结果就是两个数差异所在,然后只需计算这个结果中有多少个 1 即可 28 public static int convertA2B(int A, int B) { 29 int n = A ^ B; 30 int count = 0; 31 while (n != 0) { 32 n = n & (n - 1); // n - 1 是将 n 的最低位为零 33 count++; 34 } 35 36 return count; 37 } 38 39 public static void main(String[] args) { 40 41 int s = 8, k = 2, n = 2, t = 4, x = 5, y = 9; 42 System.out.println("测试第 k 位: "+(s & (1 << k))); 43 System.out.println("设置第 k 位: "+(s |= (1 << k))); 44 System.out.println("第 k 位置零: "+(s &= ~(1 << k))); 45 System.out.println("切换第 k 位值: "+(s ^= ~(1 << k))); 46 System.out.println("乘以 2^n: "+(s << n)); 47 System.out.println("除以 2^n: "+(s >> n)); 48 System.out.println("交集: "+(s & t)); 49 System.out.println("并集: "+(s | t)); 50 System.out.println("减法: "+(s & ~t)); 51 System.out.println("交换: "+(x = x^y^(y=x))); 52 System.out.println("取出最小非 0 位: "+(s & (-s))); 53 System.out.println("取出最小 0 位: "+(~s & (s + 1))); 54 55 }