From 552bc70b77d4fca54929b46190128721b93d887c Mon Sep 17 00:00:00 2001 From: Adam Carpenter Date: Tue, 23 Jul 2019 12:09:24 -0400 Subject: Cleaned up directory. --- ch2/2-07.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 ch2/2-07.c (limited to 'ch2/2-07.c') diff --git a/ch2/2-07.c b/ch2/2-07.c new file mode 100644 index 0000000..bf9fed1 --- /dev/null +++ b/ch2/2-07.c @@ -0,0 +1,19 @@ +#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)); +} -- cgit v1.2.3