/* parity of the number of bits 0 if even; 1 if odd. for 32 bit words */
unsigned int Parity (unsigned int w)
{
w ^= w>>1;
w ^= w>>2;
w ^= w>>4;
w ^= w>>8;
w ^= w>>16;
return w & 1;
}
BOOLEAN PowofTwo (unsigned int w)
{
unsigned wm = w-1;
return (w ^ wm) >> 1 == wm;
}
/* swaps bits at position pos1, pos2 in w */
unsigned int Exchange (unsigned int w, unsigned int pos1, unsigned int pos2)
{
unsigned int m1 = 1 << pos1;
unsigned int m2 = 1 << pos2;
if (!(w & m1) != !(w & m2))
w ^= m1 | m2;
return w;
}
unsigned int RightRotate (unsigned int w, unsigned int s) /* for 32 bits */
{
s = s & 31;
return (w << 32-s) | (w >> s);
}
unsigned int LeftRotate (unsigned int w, unsigned int s)
{
s = (32-s) & (31);
return (w << 32-s) | (w >> s);
}
BOOLEAN Subset (unsigned int u, unsigned int v)
{
return (u & v) == u;
}