#include /* * Returns x with the n bits that begin at position p inverted (i.e., 1 changed * into 0 and vice versa), leaving the others unchanged. */ unsigned invert(unsigned x, unsigned p, unsigned n) { // Create mask where bits should be flipped. unsigned mask = ~(~0 << n) << (p + 1 - n); // Flip bits with mask. return x ^ mask; } int main() { printf("%x\n", invert(0xaa, 3, 3)); printf("%x\n", invert(0xff, 3, 3)); }