From 025189ebf4a9543bc0d1f9c8dd880762f0d4a2ed Mon Sep 17 00:00:00 2001 From: Sadeep Madurange Date: Tue, 30 Nov 2021 19:41:19 +0800 Subject: 2.7 --- 2/7.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 2/7.c (limited to '2') diff --git a/2/7.c b/2/7.c new file mode 100644 index 0000000..e35ec2e --- /dev/null +++ b/2/7.c @@ -0,0 +1,23 @@ +#include + +/* inverts n bits of x starting at p */ +unsigned invert(unsigned x, int p, int n); + +int main(int argc, char * argv[]) { + return 0; +} + +unsigned invert(unsigned x, int p, int n) { + unsigned xUnset, xSet, xInv; + + // mask to unset n bits starting at p: + xUnset = (~0 << p) | ~(~0 << (p - n)); + + // mask to extract bits to invert: + xSet = ~xUnset; + + // mask out x and copy inverted bits into unset bits: + xInv = (x & xUnset) | ~(x & xSet); + + return xInv; +} \ No newline at end of file -- cgit v1.2.3