#include /* * Set n bits in x starting at position p to rightmost n bits of y. */ unsigned setbits(unsigned x, unsigned p, unsigned n, unsigned y) { // Create a basa from x that zeroes out all of the bits to be set. unsigned a = x & ~(~(~0 << n) << (p + 1 - n)); // Create a mask from y that zeroes out all of the bits except those to set. unsigned b = (y & ~(~0 << n)) << (p + 1 - n); // Apply the mask to the base. return a | b; } int main() { printf("%x\n", setbits(0xaa, 3, 3, 0x33)); printf("%x\n", setbits(0x00, 3, 3, 0xff)); return 0; }