suppose I want to apply mask 11d to unsigned int starting at position k (in that unsigned int). how can this be implemented?
I wrote a function that implements this, maybe it will be useful to someone
#include <stdio.h>
#include <limits.h>
#define BITS_PER_INT (CHAR_BIT * sizeof(unsigned int))
unsigned int set_bitmask_from_k_position(unsigned int x, int k, unsigned int pattern)
{
int nbits;
unsigned int tmp;
for (nbits = 0, tmp = pattern; tmp > 0; tmp /= 2, nbits++);
unsigned int mask = 0;
mask|=mask | ((~0u << (k+nbits-1))|(~0u >> (BITS_PER_INT-k+1)));
x &= mask;
mask = pattern << (k - 1);
x |= mask;
return x;
}
int main(void)
{
printf("0x%X\n", set_bitmask_from_k_position(0x12345678u, 12, 11));
}
I answered my own question myself, thanks to everyone who helped and even those who downgraded my question, I did not find such a question on stackowerflow, so I asked