Binary

Data structure holding bits

Boolean[]: 4-20bytes boolean[]: 1bytes BitSet: 1bit

Refer: boolean[] vs. BitSet: Which is more efficient?

Number of bit set

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
static int NumberOfSetBits(int i)
{
    i = i - ((i >>> 1) & 0x55555555);
    i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
    return (((i + (i >>> 4)) & 0x0F0F0F0F) * 0x01010101) >>> 24;
}

static int NumberOfSetBits(int i){
    int cnt = 0;
    while(i != 0){
        i = i & (i - 1); //equivalent to i -= (i & -i);
        ++cnt;
    }
    return cnt;
}

Refer: UVA10496

Last set bit

Get last set bit, useful in Fenwick tree.

1
2
3
static int lastSetBit(int n) {
    return n & (-n);
}

Remove last set bit

1
x = x & (x - 1);

Rotate bit

1
2
3
4
5
private int rotate8_(int data, int distance){
    distance = distance & 7;
    data &= 0xFF;
    return (data >> distance) | (data << (8 - distance)) & 0xFF;
}

Refer: GJ-2022-1B-C