-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBitOperate47.java
More file actions
47 lines (45 loc) · 1.19 KB
/
BitOperate47.java
File metadata and controls
47 lines (45 loc) · 1.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package offer;
/*
* 位运算
* 实现加减乘除
*/
public class BitOperate47 {
//位运算加法
static int add(int a, int b ){
/* while(b != 0){
int ans = a ^ b;
b = (a & b ) << 1;
a = ans;
}
return a;*/
/*
* 递归
*/
if(b == 0) return a;
//不带进位的二进制加法
int sum = a ^ b ;
//进位左移相当于在产生 进位的位置 的高位 加上进位
int carry = (a&b) << 1;
return add(sum, carry);
}
//位运算减法
//位运算乘法
//尾位运算除法
//位运算交换变量的值,不用第三变量
static void swap( int a , int b ){
System.out.println("转换前:" + a + " " + b);
/*a = a + b ;
b = a - b; // a
a = a - b; // b;
*/
a = a ^ b;
b = a ^ b; // a^b^ b 可定等于 a => b = a
a = a ^ b; //a^b^ a 等于b
System.out.println("转换前:" + a + " " + b);
}
public static void main(String[] args) {
System.out.println(add(5, 17));
System.out.println(add(-1,-2));
swap(-1, -2);
}
}