Bitwise Operations

Swap a and b around

a ^= b; b ^= a; a ^= b;

or equivalently,
a ^= b ^= a ^= b;

note: a^b obtains a mask which has 0 on bits that a and b are the same, and has 1 on bits that a and b are oppsite

Return a mask that set the first 1

c & (~c + 1) or c & -c

Return a mask that set the first 0

~c & (c + 1)

Count number of 1

int count_one1(int c)
{
    int i;
    for (i = 0; c; i++)
        c ^= (c & -c);
    return i;
}
 
int count_one2(int c)
{
    int i;
    for (i = 0; c; i++)
        c &= (c - 1);
    return i;
}
 
int count_one3(int c)
{
    int n = 0, i;
    for (i = 0; i < 32; i++) {
        if (c & 1)
            n++;
        c >>= 1;
    }
    return n;
}

Left rotate a byte by certain bits

char rotate(char c, int i)
{
    i %= 8;
    return (c << i) | ((unsigned char)c >> (8 - i));
}

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License