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 }
转载于:https://www.cnblogs.com/aoeiuvAQU/p/11193014.html
相关资源:各显卡算力对照表!