I would like to calculate an inverse mask for an unsigned char.meaning if the original mask 0xc0 the the inverse mask should be 0x3f.that is to say all the bits should be flipped or inverted.I have tried the below but doesn't seem to be working.
int flipBit(int x, unsigned char position)
{
int mask = 1 << position;
return x ^ mask;
}
int main(int argc , char* argv[])
{
uint8_t mask = 0x03;
uint8_t inverse_mask = 0;
uint8_t temp = 0;
int loop = 0;
for (loop = 0; loop < 8 ; loop ++)
{
temp = flipBit(mask,loop);
inverse_mask |= temp;
}
printf("mask 0x%x inv mask 0x%x \n",mask,inverse_mask);
return 0;
}
The results I get are mask 0x3 inv mask 0xff
I cannot seem to find the bug in my code.
For example, consider a set in which s = {1, 2, 5, 8, 6, and 7}. To represent the set of {2, 5, 7}, we can use any bitmask 010110. This is done by considering a value 'x'. We can perform x|=x<<i for setting a bit.
Bitmask also known as mask is a sequence of N -bits that encode the subset of our collection. The element of the mask can be either set or not set (i.e. 0 or 1). This denotes the availability of the chosen element in the bitmask. For example, an element i is available in the subset if the ith bit of mask is set.
A mask defines which bits you want to keep, and which bits you want to clear. Masking is the act of applying a mask to a value. This is accomplished by doing: Bitwise ANDing in order to extract a subset of the bits in the value.
Why can't you just do this:
uint8_t mask = 0x03;
uint8_t inverse_mask = ~mask;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With