From c24973af02bc33f2f5f25d37e22ca91da5de3c47 Mon Sep 17 00:00:00 2001 From: sinanmohd Date: Sat, 4 Jun 2022 12:11:15 +0530 Subject: inital commit --- 2.6.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 2.6.c (limited to '2.6.c') diff --git a/2.6.c b/2.6.c new file mode 100644 index 0000000..23ce1e6 --- /dev/null +++ b/2.6.c @@ -0,0 +1,47 @@ +#include + +#define INT_NBITS 32 + +unsigned getbits(unsigned x, int from, int to); +void pbits(int x); +unsigned setbits(unsigned x, int from, int to, int source); + +int +main(void) +{ + int x = 423834583; + int y = 354543434; + + pbits(x); + pbits(y); + + pbits(setbits(x, 12, 5, y)); + + 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 +setbits(unsigned x, int from, int to, int source) +{ + int model = ((((unsigned)~0 << (INT_NBITS-from)) >> (INT_NBITS - (from+to))) << to); + return (x & ~model) | (source & model); +} -- cgit v1.2.3