Files
learning_c/ch_02/getbits/main.c
T
2020-10-18 17:15:40 -04:00

41 lines
1010 B
C

/*
* Simple implementation of getbits() function.
*
*/
#include <stdio.h>
// Gets n bits from position p
unsigned getbits(unsigned int x, int p, int n);
int main()
{
// 11111110111 = 1015
unsigned int x = 1015;
int p = 4;
int n = 3;
// Result is 111 = 7
unsigned int some_bits = getbits(x, p, n);
return 0;
}
unsigned getbits(unsigned int x, int p, int n)
{
printf("(%d >> (%d + 1 - %d)) & ~(~0 << %d)\n", x, p, n, n);
printf("(%d >> (%d + 1 - %d)) & ~(%d << %d)\n", x, p, n, ~0, n);
printf("(%d >> (%d + 1 - %d)) & ~(%d)\n", x, p, n, ((~0) << n));
printf("(%d >> (%d + 1 - %d)) & %d\n", x, p, n, ~((~0) << n));
printf("(%d >> %d) & %d\n", x, (p + 1 - n), ~((~0) << n));
printf("%d & %d\n", (x >> (p + 1 - n)), ~((~0) << n));
printf("%d\n", ((x >> (p + 1 - n)) & ~((~0) << n)));
// At position 4 and 3 bits from that position of value 1023 is
// 11111110111 = 1015
// 110 = 6
return (x >> (p + 1 - n)) & ~(~0 << n);
}