blob: bf9fed1fdacea8986a46f30e36e877307477ce72 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include<stdio.h>
/*
* 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));
}
|