- Notifications
You must be signed in to change notification settings - Fork 366
/
Copy pathBitOperations.java
80 lines (71 loc) · 1.99 KB
/
BitOperations.java
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
publicclassBitOperations {
//Get ith Bit
publicstaticintgetIthBit(intn, inti) {
intbitMask = 1<<i;
return (n & bitMask) == 0 ? 0 : 1;
}
//Set ith Bit
publicstaticintsetIthBit(intn, inti) {
intbitMask = 1<<i;
returnn | bitMask;
}
//Clear ith Bit
publicstaticintclearIthBit(intn, inti) {
intbitMask = ~(1<<i);
returnn & bitMask;
}
//Update ith Bit
publicstaticintupdateIthBit(intn, inti, intval) {
//Method1
// if(val == 0) {
// return n & (~(1<<i));
// } else {
// return n | (1<<i);
// }
//Method2
n = clearIthBit(n, i);
intbitMask = val<<i;
returnn | bitMask;
}
//Clear Last i Bits
publicstaticintclearLastIbits(intn, inti) {
intbitMask = (~0)<<i; // or (-1)<<i
returnn | bitMask;
}
//Clear Bits in Range (i,j)
publicstaticintclearBitsinRange(intn, inti, intj) {
inta = ~0<<i;
intb = (1<<i)-1;
intbitMask = a | b;
returnn & bitMask;
}
//Check if number is power of 2 or not
publicstaticbooleanisPowerof2(intn) {
return (n & (n-1)) == 0;
}
//Count number of set bits
publicstaticintcountSetBits(intn) {
intsetBits = 0;
intbitMask = 1;
while(n != 0) {
if((n & bitMask) != 0) { //last bit is 1
setBits++;
}
n = n>>1;
}
returnsetBits;
}
//a faster method to count set bits
publicstaticintcountSetBits2(intn) {
intsetBits = 0;
while(n>0) {
// removes the last set bit from curr number
n = n & (n-1);
setBits++;
}
returnsetBits;
}
publicstaticvoidmain(Stringargs[]) {
System.out.println(countSetBits(9));
}
}