From c24973af02bc33f2f5f25d37e22ca91da5de3c47 Mon Sep 17 00:00:00 2001 From: sinanmohd Date: Sat, 4 Jun 2022 12:11:15 +0530 Subject: inital commit --- 2.7.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 2.7.c (limited to '2.7.c') diff --git a/2.7.c b/2.7.c new file mode 100644 index 0000000..fc493aa --- /dev/null +++ b/2.7.c @@ -0,0 +1,44 @@ +#include + +#define INT_NBITS 32 + +unsigned getbits(unsigned x, int from, int to); +void pbits(int x); +unsigned invert(unsigned x, int from, int to); + +int +main(void) +{ + int x = 3423834583; + + pbits(x); + + pbits(invert(x, 32, 32)); + + return 0; +} + +unsigned +getbits(unsigned x, int from, int to) +{ + return (x >> (from+1-to)) & ~(~(unsigned)0 << to); +} + +void +pbits(int x) +{ + for (int i = INT_NBITS-1; i >= 0; i--) { + if (i%4 == 3) + printf(" "); + + printf("%u", getbits(x, i, 1)); + } + + printf("\n"); +} + +unsigned +invert(unsigned x, int from, int to) +{ + return x ^ ((((unsigned)~0 << (INT_NBITS-from)) >> (INT_NBITS-to)) << (from-to)); +} -- cgit v1.2.3