#include #include #include uint32_t bitslice(uint32_t number, int hi, int lo); uint32_t mask(int hi, int lo); int main(int argc, char *argv[]) { uint32_t number; int range_hi; int range_lo; uint32_t result; /* check number of arguments */ if (argc != 4) { printf("bad number of parameters\n"); return -1; } /* load input into variables */ sscanf(argv[1], "%x", &number); sscanf(argv[2], "%d", &range_hi); sscanf(argv[3], "%d", &range_lo); /* calculate and print result */ result = bitslice(number, range_hi, range_lo); printf("%#x[%d:%d] = %#x\n", number, range_hi, range_lo, result); return 0; } uint32_t bitslice(uint32_t number, int hi, int lo) { return (number >> lo) & mask(hi, lo); } uint32_t mask(int hi, int lo) { uint32_t result = 0; if (hi - lo + 1 == 32) return ~result; return (1 << (hi - lo + 1)) - 1; }