diff options
| -rw-r--r-- | 2/7.c | 23 |
1 files changed, 23 insertions, 0 deletions
@@ -0,0 +1,23 @@ +#include <stdio.h> + +/* 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 |
