Common Bit Manipulation

bool getBit(int num, int shift)
{
 return ( (num & (1 << shift)) != 0);
}
int setBit(int num, int shift)
{
 return ( num | (1 << shift));
}
int clearBit(int num, int shift)
{
 int mask = ~ (1 << shift);
 return num & mask;
}
int clearBitMSBthroughShiftBit(int num, int shift)
{
 int mask = (1 << (shift )) -1;
 return num & mask;
}
int clearBitMSBthroughShift0(int num, int shift)
{
 int mask = ~ ((1 << (shift +1 )) -1);
 return num & mask;
}
int updateBit(int num, int shift, int v) //set i-th bit = v
{
 int mask = ~ (1 << shift);
 return (num & mask) | (v << shift);
}

 

CTCI: Ch. 5-1

You are given two 32-bit numbers, N and M, and two bit positions, i and j. Write a method to insert M into N such that M starts at bit j and ends at bit i.
You can assume that the bits j through I have enough space to fit all of M. That is, if M = 10011, you can assume that there are at least 5 bits between j and i.
You would not, for example, have j = 3 and i = 2, because M could not fully fit between bit 3 and bit 2.

 

Continue reading