I am trying to obtain a number of bits from a byte in C. Currently I am doing so by shifting and then bit masking (0xFF), however the shifting operator is taking a long time. Is there another way to this using only bitwise operations? And if so how?
I'm afraid not. Each of the bit positions is an independent data stream. So long as you're restricted to these, no amount of bit-wise operation will make one bit affect any position other than its own.
Even if you allow basic arithmetic, the appropriate operations -- multiply and divide by powers of 2 -- are slower and less obvious than the shift operations.
To shift right N bits, divide by 2^N.
To shift left N bits, multiply by 2^N.
If the bits are in the same place every time, and you can use them where they are, then move your mask. For instance
word & 0x3FC0
will get you bits 2-9 (or 13-6, depending on your indexing) of the word.
As before, though, I would be surprised to find that arithmetic is faster than shifting. What platform are you using where shift is slow? Most processors have this as a machine instruction.
Since you're not sharing details of the machine or application, about all I can suggest is to shift to the nearest byte boundary -- no more than 4 bits away -- and extract the desired value by accessing the byte. If that still isn't a reasonable solution for you, then I'll wait for a proper problem description.