#include unsigned int setbits(unsigned int x, int p, int n, unsigned int y) { unsigned int y_n = y & ~(~0 << n); unsigned int mask = ~(~(~0 << n) << p); unsigned int x_ret = x & mask; x_ret = x_ret | (y_n << p); return x_ret; } int main(void) { /* * x = 0x33 = 110011 * ^^^ * nnn * y = 0x4e = 1001110 * ^^^ * nnn * * result = 0x3b = 111011 */ printf("%x\n", setbits(0x33, 2, 3, 0x4e)); }